2011-04-16 18 views
7

Czytałem How do I discover memory usage of my application in Android? i kilka innych odpowiedzi, ale może nie całkiem paznokci to w dół ...Ustalenie dostępną przestrzeń sterty na aktywność (OutOfMemoryException zapobiegania)

mam działalność, która będzie załadować plik z pamięć zewnętrzną do pamięci i wykonaj niektóre operacje parsowania/manipulacji/etc in-memory. Zanim go załaduję, chcę zgadnąć, czy spowoduje to wyjątek OutOfMemoryException i zawiesi działanie (Rozumiem, że dokładne odpowiedzi nie są możliwe, ocena jest lepsza niż nic).

Z powyższej odpowiedzi , wymyśliłem:

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; 

więc pytania:

1) jestem szalony?
2) jak połączyć wartości z obiektu MemoryInfo, aby oszacować wykorzystanie sterty aktywności/zadania? (Powyższy link zawiera przegląd wiadomości pss/private-dirty/shared-dirty, ale niewystarczająco dużo informacji, aby zgadnąć, jak to zrobić.)
3) czy debugowanie zawsze istnieje lub tylko podczas debugowania?
4) Czy istnieje mądrzejszy sposób?

Odpowiedzi takie jak te: Two questions about max heap sizes and available memory in android wydają się sugerować, że nie ma lepszej metody niż to?

Wiem, że używanie mniejszej ilości pamięci jest dobrą rzeczą i jestem. Chciałbym wiedzieć, jak kodować defensywnie, tutaj. Wydaje się dziwne, że trzeba tylko poczekać na wyjątek, aby wiedzieć, że brakuje Ci pamięci.

Dzięki!

Odpowiedz

0

możesz odwołać się do tego linku .. Kompletny przegląd tego samego problemu, z którym się spotykasz. OOMRESEACH

Powiązane problemy