From dd6a0dbf2f882b62e70430d6d4deceae0fbfe4f1 Mon Sep 17 00:00:00 2001 From: Richard Uhler Date: Thu, 26 Apr 2018 15:09:30 +0100 Subject: [PATCH] Fix leak of WeakReferences on mThemeRefs list. Periodically remove references from the list whose referents have been garbage collected. Bug: 73961798 Test: Device boots. Test: Take a heap dump of systemui and manually check that the state of ThemeRefs looks reasonable. Change-Id: I691027feb5dd217bcb60406b28897b9614e2a845 --- core/java/android/content/res/Resources.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java index c58cde006759f..7adea6a880be0 100644 --- a/core/java/android/content/res/Resources.java +++ b/core/java/android/content/res/Resources.java @@ -127,6 +127,14 @@ public class Resources { */ private final ArrayList> mThemeRefs = new ArrayList<>(); + /** + * To avoid leaking WeakReferences to garbage collected Themes on the + * mThemeRefs list, we flush the list of stale references any time the + * mThemeRefNextFlushSize is reached. + */ + private static final int MIN_THEME_REFS_FLUSH_SIZE = 32; + private int mThemeRefsNextFlushSize = MIN_THEME_REFS_FLUSH_SIZE; + /** * Returns the most appropriate default theme for the specified target SDK version. *