2016-02-11 24 views
7

Sto avviando un servizio => servizio in background e avvio di un controllo per i file in "nuovo thread", nel registro sto ricevendo il seguente, il servizio/l'app viene messa in pausa.Getting I/art: Esplicita scansione contrassegni simultanei GC liberato

Log: I/art: Explicit concurrent mark sweep GC freed 25935(1686KB) AllocSpace objects, 13(903KB) LOS objects, 39% free, 13MB/22MB, paused 649us total 43.569ms

E 'solo una scansione per i file in MyData nella SDcard, che contengono una serie di foto (circa 20 foto).

** Scansione = Acquisizione dei nomi delle foto e salvataggio in stringa.

risposta

15

Tutto ciò significa che il garbage collector sta facendo il suo lavoro e sta liberando memoria.

Se lo vedi frequentemente (o in modo coerente), probabilmente stai allocando troppi oggetti. Una causa comune è l'allocazione tanti (o pochi grandi) gli oggetti all'interno di un ciclo in questo modo:

for (int i = 0; i < 100; i++) { 
    Bitmap bmp = Bitmap.create(100, 100, Bitmap.Config.ARGB_4444); 
} 

Ogni volta che ci ha colpito di questo ciclo, ci assegnano un centinaio di nuovi oggetti Bitmap.

Il modo migliore per impedire gli swap GC è di non allocare oggetti. Ovviamente devi allocare oggetti in Java, quindi devi assicurarti che non ti stia allocando inutilmente.

Here is one of many YouTube videos che Google ha rilasciato con suggerimenti su come evitare eventi GC e gestire correttamente la memoria.

+1

Ho riscontrato questo problema con un'app che ha funzionato 30 volte di seguito e non viene modificato nulla nel codice. Ho appena ottenuto uno schermo grigio e continua a farlo per un'eternità. Android Studio è'crap – ObedMarsh

+0

Android Studio è un IDE, non ha nulla a che fare con il codice in esecuzione sul tuo dispositivo. Sembra che tu abbia un ciclo che funziona all'infinito. –

+0

Il codice funziona correttamente quando creo un nuovo emulatore, quindi inizia a farlo se dopo un po 'non ci sono loop nel codice al momento. È un'app di note di base che usa sqllite, c'è come 3 note nel database atm. Sembra che accada quando provo a scorrere su un cursore per qualche motivo. – ObedMarsh