2011-04-16 11 views
7

Ho letto How do I discover memory usage of my application in Android? e un mucchio di altre risposte, ma non arrivano a chiodo questo giù ...Rilevamento dello spazio heap disponibile per attività (prevenzione OutOfMemoryException)

ho un'attività che caricare un file da memoria esterna in memoria e fare un po 'di parsing/manipulation/etc in memoria. Prima di caricarlo, voglio indovinare se farlo o meno causerà una OutOfMemoryException e mandare in crash l'attività (ho capito che le risposte esatte non sono possibili, una stima è meglio di niente)

Dalla risposta di cui sopra , mi si avvicinò con:

ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE); 
MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); 
activityManager.getMemoryInfo(memoryInfo); 

int pid [] = {android.os.Process.myPid()}; 

android.os.Debug.MemoryInfo[] mi = activityManager.getProcessMemoryInfo(pid); 

// calculate total_bytes_used using mi... 

long available_bytes = activityManager.getMemoryClass()*1024*1024 - total_bytes_used; 

Quindi, le domande:

1) sono pazzo?
2) come calcolare i valori dall'oggetto MemoryInfo per stimare l'utilizzo dell'heap dell'attività/attività? (Il link sopra fornisce una panoramica di pss/private-dirty/shared-dirty, ma non abbastanza informazioni per indovinare come eseguire il totale.)
3) Debug esiste sempre o solo quando si esegue il debug?
4) c'è un modo più intelligente?

Risposte come queste: Two questions about max heap sizes and available memory in android sembrano implicare che non esiste un modo migliore di questo?

So che usare meno memoria è una buona cosa, e lo sono. Sono interessato a sapere come codificare in modo difensivo, qui. Sembra strano aspettare solo un'eccezione per sapere che hai esaurito la memoria.

Grazie!

risposta

0

puoi fare riferimento a questo link .. Una ricerca completa sullo stesso problema che stai affrontando. OOMRESEACH

Problemi correlati