Sto pensando di implementare il primo livello del mio caching in un'app Android. Stavo pensando a SoftReferences per evitare sicuramente le eccezioni OOM, ma poiché ci sono molti articoli su come Android li libera "troppo presto", ho deciso di esaminare la cache di android.util.LruCache.Dimensionamento della cache LRU in base alle funzionalità del dispositivo e alla memoria disponibile
Domanda: Come si dimensiona correttamente per il dispositivo effettivo? Sembra tutto molto bello che una cache LRU sia la vera soluzione e non le SoftReferences, ma se si vuole davvero evitare OOM Exceptions, è estremamente pericoloso andare con qualsiasi numero di megabyte di hard reference. Non è sicuro se me lo chiedi. Ad ogni modo, questa sembra essere l'unica opzione. Stavo cercando getMemoryClass per scoprire la dimensione dell'heap dell'app sul dispositivo reale (+ controllare la dimensione dell'heap libero prima di ridimensionare la cache). La linea base è di 16 Megs che suona bene, ma ho visto dispositivi (G1 ad esempio nei vecchi tempi) che lanciavano eccezioni OOM di circa 5 Megabyte di heap (secondo Eclipse MAT). So che un G1 è molto vecchio, ma il punto è che le mie esperienze non sono realmente allineate con la linea di base di 16 Megs menzionata dalla documentazione. Quindi sono completamente incerto su come dovrei scalare una cache di LRU se ho bisogno di più che posso ragionevolmente ottenere. (Sarebbe felice con 8 Megs e andrebbe con un minimo di 1 Meg su un dispositivo di bassa definizione)
Grazie per eventuali suggerimenti.
Edit: La classe di cache LRU Android mi riferisco a: http://developer.android.com/reference/android/util/LruCache.html
Sì, ho finito per usare la classe di memoria in un modo simile. Trovo ancora troppo approssimativo, ma non ho trovato un metodo più preciso. – user289463
Assicurati che sizeOf restituisca anche la dimensione in byte. Nel link precedente hanno restituito bitmap.getByteCount()/1024 (in kilo byte! Questo funziona ovviamente, ma il tuo cacheSize dovrebbe essere 1024 * memClass/8) – DominicM