Prima di abilitare l'opzione largeHeap
, gestivo bitmap di grandi dimensioni e si consuma quasi l'intera memoria disponibile per l'applicazione, e il suo riciclo sulla navigazione e il caricamento di nuovi funziona su quasi l'intero heap disponibile. Tuttavia, quando alcune operazioni richiedono un po 'più di memoria, l'applicazione si blocca. Quindi ho abilitato lo largeHeap=true
per avere un po 'di memoria in più.Ricicla bitmap con largeHeap abilitato
Ma facendo questo ha un comportamento imprevisto, è sembra che recycle()
metodo bitmap non funzionano il più delle volte, e l'applicazione che ha lavorato in 58MB di memoria (e supera talvolta gettando un OutOfMemoryException
) ora utilizza la memoria in modo esponenziale e mantiene in crescita (per ora il test che ho fatto è arrivato a 231Mb di memoria allocata), il comportamento previsto è che la gestione della memoria continua a funzionare e l'applicazione non utilizzerà più di 60Mb.
Come posso evitarlo? O riciclare in modo efficiente bitmap?
MODIFICA: In realtà, ho assegnato un OutOfMemoryError
durante l'allocazione di più di 390 Mb di memoria sul dispositivo. La lettura dei log GC_ * ha mostrato che solo GC_FOR_ALLOC che ha liberato 3,8 Mb a volte, ma quasi mai nessun altro GC esegue liberato qualcosa.
Hai guardato questo bel video? http://www.youtube.com/watch?v=_CruQY55HOk Suppongo tu abbia una perdita di memoria nel tuo codice – HitOdessit
Dovrai dirci se si tratta di pre-Honeycomb o> = Honeycomb –