Fino ad ora sto utilizzando una cache SoftReference per immagini in Android. Questa cache è usata per le immagini mostrate in ListViews e dovrebbe aiutare a conservare le immagini degli oggetti in memoria che non sono mostrati sullo schermo, se rimane abbastanza memoria.Come implementare un in Memory Image Cache in Android?
Il problema con questo è che le SoftReferenze vengono raccolte inutilmente quasi nello stesso momento in cui viene rilasciato l'ultimo riferimento. Il risultato è che un'immagine che viene rimossa dallo schermo è raccolta di dati inutili in quel momento e se l'utente scorre indietro fino a questa voce in ListView l'immagine viene ricaricata dalla memoria interna del telefono risultando in un processo di caricamento lento e complesso, risultante in frequenti ridisegni della lista e cattive prestazioni generali.
Il bug request per il comportamento di riferimento software indica che questo è il comportamento previsto e che è necessario utilizzare uno LRU-Cache per memorizzare nella cache questo tipo di elementi.
Conoscere la mia domanda. La cache della LRU occupa solo la quantità di memoria che gli è consentita. Ma se l'app ha bisogno di molta memoria, non libererà memoria. Come dovrei determinare quanta memoria posso permettere alla Cache di usare, e c'è un modo per ridurre la dimensione della cache se la situazione della memoria del telefono diventa stretta?
Al momento la cache dell'immagine viene salvata all'interno dell'applicazione come una sorta di archivio di immagini globale per tutte le attività. Ciò comporterebbe che la mia app usasse costantemente tutta la memoria della cache dell'immagine anche se le mie attività sono in background o distrutte.
grazie per la risposta – Janusz
Non riesco a vedere come usare LruCache risolverebbe il problema della memorizzazione nella cache delle immagini o di qualsiasi altro BLOB. Il problema è la sua dimensione fissa, di cui ogni voce contiene un forte riferimento all'oggetto memorizzato nella cache. Ciò non si ridimensiona con la memoria del dispositivo. – Matthias
LruCache elimina le voci quando le dimensioni superano il limite impostato. È possibile sovrascrivere un metodo per aiutare LruCache a misurare le dimensioni di ciascuna voce. –