Я перепробовал все вышеперечисленные методы, и они были близки, но не совсем правильно (по крайней мере, для моей ситуации).
Я использовал bitmap.getByteCount (); внутри метода sizeOf () при создании нового LruCache:
mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getByteCount();
}
};
Затем я попробовал предложенное:
return bitmap.getRowBytes() * bitmap.getHeight();
Это было здорово, но я заметил, что возвращаемые значения были другими, и когда я использовал приведенное выше предложение, он даже не создал кеш на моем устройстве. Я проверил возвращаемые значения на Nexus One под управлением api 3.2 и Galaxy Nexus под управлением 4.2:
bitmap.getByteCount(); returned-> 15
bitmap.getRowBytes() * bitmap.getHeight(); returned-> 15400
Итак, чтобы решить мою проблему, я просто сделал это:
return (bitmap.getRowBytes() * bitmap.getHeight()) / 1000;
вместо:
return bitmap.getByteCount();
Может быть, вы не в такой ситуации, но у меня это сработало.