Se devi usare (e conservare) una grande quantità di memoria, allora sì, puoi e dovresti usarla android:largeHeap="true"
. Ma se lo usi, dovresti essere pronto a scaricare la tua app dalla memoria ogni volta che altre app sono in primo piano.
Con "essere preparati", intendo che dovresti progettare in base a tale probabilità, in modo che i tuoi metodi onStop()
e onResume()
siano scritti nel modo più efficiente possibile, assicurandoti che tutto lo stato pertinente venga salvato e ripristinato in un modo che presenti un aspetto uniforme per l'utente.
Ci sono tre metodi che si riferiscono a questo parametro: maxMemory()
, getMemoryClass()
, e getLargeMemoryClass()
.
Per la maggior parte dei dispositivi, maxMemory()
rappresenterà un valore simile a quello getMemoryClass()
di default, anche se quest'ultimo è espresso in megabyte, mentre il primo è espresso in byte.
Quando si utilizza il largeHeap
parametro, maxMemory()
verrà aumentato a un livello più alto specifico del dispositivo, mentre getMemoryClass()
rimarrà lo stesso.
getMemoryClass()
non limita la dimensione dell'heap, ma ti dice la quantità di heap che dovresti usare se vuoi che la tua app funzioni comodamente e compatibilmente entro i limiti del particolare dispositivo su cui stai eseguendo.
maxMemory()
, Al contrario, non limitare la dimensione heap, e così si fa l'accesso guadagno mucchio ulteriore aumentando il suo valore, e largeHeap
fa aumentare tale valore. Tuttavia, la maggiore quantità di heap è ancora limitata e tale limite sarà specifico del dispositivo, il che significa che la quantità di heap disponibile per la tua app varierà a seconda delle risorse del dispositivo su cui è in esecuzione l'app. Quindi, l'utilizzo largeHeap
non è un invito per la tua app ad abbandonare ogni cautela e farsi strada attraverso il buffet all-you-can-eat.
La tua app può scoprire esattamente quanta memoria sarebbe resa disponibile su un particolare dispositivo utilizzando il largeHeap
parametro richiamando il metodo getLargeMemoryClass()
. Il valore restituito è in megabyte.
Questo post precedente include una discussione del largeHeap
parametro, nonché una serie di esempi di quali quantità di heap sono rese disponibili con e senza il suo utilizzo, su diversi dispositivi Android specifici:
Rileva la dimensione dell'heap dell'applicazione in Android
Non ho distribuito nessuna delle mie app con questo parametro impostato su true. Tuttavia, ho del codice ad alta intensità di memoria in una delle mie app per la compilazione di una serie di parametri relativi all'ottimizzazione, che viene eseguita solo durante lo sviluppo. Aggiungo il largeHeap
parametro solo durante lo sviluppo, per evitare errori di memoria insufficiente durante l'esecuzione di questo codice. Ma rimuovo il parametro (e il codice) prima di distribuire l'app.