diff options
| -rw-r--r-- | core/java/android/app/PropertyInvalidatedCache.java | 19 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/app/PropertyInvalidatedCacheTests.java | 16 |
2 files changed, 33 insertions, 2 deletions
diff --git a/core/java/android/app/PropertyInvalidatedCache.java b/core/java/android/app/PropertyInvalidatedCache.java index a51b9d3956df..27f9f54d9522 100644 --- a/core/java/android/app/PropertyInvalidatedCache.java +++ b/core/java/android/app/PropertyInvalidatedCache.java @@ -1406,6 +1406,17 @@ public class PropertyInvalidatedCache<Query, Result> { } /** + * Return the number of entries in the cache. This is used for testing and has package-only + * visibility. + * @hide + */ + public int size() { + synchronized (mLock) { + return mCache.size(); + } + } + + /** * Returns a list of caches alive at the current time. */ @GuardedBy("sGlobalLock") @@ -1612,8 +1623,12 @@ public class PropertyInvalidatedCache<Query, Result> { * @hide */ public static void onTrimMemory() { - for (PropertyInvalidatedCache pic : getActiveCaches()) { - pic.clear(); + ArrayList<PropertyInvalidatedCache> activeCaches; + synchronized (sGlobalLock) { + activeCaches = getActiveCaches(); + } + for (int i = 0; i < activeCaches.size(); i++) { + activeCaches.get(i).clear(); } } } diff --git a/core/tests/coretests/src/android/app/PropertyInvalidatedCacheTests.java b/core/tests/coretests/src/android/app/PropertyInvalidatedCacheTests.java index ed2b10117308..3768063f2a91 100644 --- a/core/tests/coretests/src/android/app/PropertyInvalidatedCacheTests.java +++ b/core/tests/coretests/src/android/app/PropertyInvalidatedCacheTests.java @@ -368,4 +368,20 @@ public class PropertyInvalidatedCacheTests { PropertyInvalidatedCache.MODULE_BLUETOOTH, "getState"); assertEquals(n1, "cache_key.bluetooth.get_state"); } + + @Test + public void testOnTrimMemory() { + TestCache cache = new TestCache(MODULE, "trimMemoryTest"); + // The cache is not active until it has been invalidated once. + cache.invalidateCache(); + // Populate the cache with six entries. + for (int i = 0; i < 6; i++) { + cache.query(i); + } + // The maximum number of entries in TestCache is 4, so even though six entries were + // created, only four are retained. + assertEquals(4, cache.size()); + PropertyInvalidatedCache.onTrimMemory(); + assertEquals(0, cache.size()); + } } |