2016-07-04 5 views
0
final int maxMemory = (int) (Runtime.getRuntime().maxMemory()/1024); 

UNDwarum teilen wir 1024 für eine benutzerdefinierte LRUCache in android

final int maxMemory = (int) (Runtime.getRuntime().maxMemory()/1024/8); 

Howcome ich habe die MaxMemory von 1024. Darüber teilen, warum würde man wieder teilen, indem er 8. Ich habe gesehen, in den Tutorials, die ich für das Schreiben eines benutzerdefinierten LRUCACHE gesehen habe, habe ich beides gemacht, aber ich verstehe die Implikationen nicht?

Antwort

1

Howcome ich habe die MaxMemory von 1024

Sie teilen müssen nicht alles teilen, indem er etwas LRUCache zu verwenden.

Was Sie Notwendigkeit zu tun ist für die maxSize, die Sie in den LRUCache Konstruktor in den gleichen Einheiten zu sein, wie Sie in Ihrer sizeOf() Methode verwenden.

Zum Beispiel, hier ist ein Beispiel für etwas LRUCache Code, genommen von the JavaDocs:

int cacheSize = 4 * 1024 * 1024; // 4MiB 
LruCache<String, Bitmap> bitmapCache = new LruCache<String, Bitmap>(cacheSize) { 
    protected int sizeOf(String key, Bitmap value) { 
     return value.getByteCount(); 
    } 
} 

Hier ist die Einheit der Größe ein Byte ist. So gibt der Kommentar an, dass sie eine Anzahl von Bytes übergeben, die 4MiB darstellen, und sizeOf() gibt die Größe des Bitmap in Byte zurück.

+1

Wie werden wir MiBs für die Cache-Größe verwenden? Warum nicht nur Bytes? – 3alto

+0

@ 3alto: Das Beispiel aus den JavaDocs - die ich in meiner Antwort geschrieben habe - verwendet Bytes. – CommonsWare

+0

Ich kann aus irgendeinem Grund nicht wirklich meinen Kopf darum lol. Wirklich, was mich verwirrt, ist Runtime # maxMemory() gibt uns die Menge an Speicher, die wir in Bytes haben, ja? Wie kann man dann die Anzahl der Bytes durch 1024 teilen, um die Messung in Kilobyte zu erhalten? – 3alto

Verwandte Themen