Displaying Bitmaps Efficiently Training - Change memory calculation

When calculating memory cache size, use Runtime.maxMemory() instead
of getMemoryClass() which is a more accurate value of available VM
heap size.

Bug: 7988323
Change-Id: Iaa9681a11aad5cad3857dfe76f0b8e4811b2243c
This commit is contained in:
Adam Koch
2013-01-11 16:53:37 -05:00
parent 0bb4dade30
commit 6f680f524a
2 changed files with 8 additions and 7 deletions

View File

@@ -101,19 +101,20 @@ private LruCache<String, Bitmap> mMemoryCache;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
... ...
// Get memory class of this device, exceeding this amount will throw an // Get max available VM memory, exceeding this amount will throw an
// OutOfMemory exception. // OutOfMemory exception. Stored in kilobytes as LruCache takes an
final int memClass = ((ActivityManager) context.getSystemService( // int in its constructor.
Context.ACTIVITY_SERVICE)).getMemoryClass(); final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
// Use 1/8th of the available memory for this memory cache. // Use 1/8th of the available memory for this memory cache.
final int cacheSize = 1024 * 1024 * memClass / 8; final int cacheSize = maxMemory / 8;
mMemoryCache = new LruCache<String, Bitmap>(cacheSize) { mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
@Override @Override
protected int sizeOf(String key, Bitmap bitmap) { protected int sizeOf(String key, Bitmap bitmap) {
// The cache size will be measured in bytes rather than number of items. // The cache size will be measured in kilobytes rather than
return bitmap.getByteCount(); // number of items.
return bitmap.getByteCount() / 1024;
} }
}; };
... ...