2012-02-14 12 views
6

I niedawno zauważyłem, że kiedy załadować WebView opiera się kod z pliku (za pomocą aktywa lub katalogu lokalnego), The WebView wydostaną pamięć po destroy() wywoływana jest metoda . Zawęziłem to do problemu z odniesieniami. Program/przeglądarka tworzy kopie oryginalnego widoku i traci referencje w tabeli JNI - w wyniku tego program ulega awarii po 512 wpisach.Android WebView Przeciek pamięci podczas korzystania z aktywów

Widziałem ten artykuł, ale nie przecieka WebView fix nie wydaje się do pracy z HTML w aktywach lub folderów zewnętrznych.

Memory leak in WebView

Problem nie istnieje gdy aplikacja jest w całości oparte serwer; ale potrzebuję aplikacji, aby móc "zsynchronizować" dane i zaktualizować repozytorium offline tymi widokami.

Dalsze informacje: I podjęły WebViews i umieścić je w ViewPager aby umożliwić przewijanie. Ten problem nie istniał w wersji 3.2.4/1, ale pojawił się w wersji 4.0.3. Dostaję dużo ostrzeżeń JNI (nie udało się znaleźć wpisu) i nadal istnieją po zniszczeniu widoków. Przyjrzałem się temu przez hprof i zauważyłem, że HTML pozostaje w pozostałych zmiennych.

Jakiekolwiek światło, jak poprawić to zachowanie, byłoby docenione.

Edit:

specyfiki na temat katastrofy

Failed adding to JNI local ref table (has 512 entries) 
"Thread-375" prio=5 tid=15 RUNNABLE 
| group="main" sCount=0 dsCount=0 obj=0x41504a90 self=0x1a9cf80 
| sysTid=10314 nice=0 sched=0/0 cgrp=default handle=27159240 
| schedstat=(455083000 66745000 774) utm=30 stm=15 core=3 

at android.content.res.AssetManager.readAsset(Native Method) 
at android.content.res.AssetManager.access$700(AssetManager.java:35) 
at android.content.res.AssetManager$AssetInputStream.read(AssetManager.java:573) 
at dalvik.system.NativeStart.run(Native Method) 

UPDATE:

Aby rozwiązać ten problem, trzeba załadować z karty SD lub innego mechanizmu przechowywania. Błąd jest trwały, gdy załadowany jest plik Javascript, nie wiem, czy jest on poprawiony w Chrome, ale nie wydaje się być poprawiony w przeglądarce w najnowszym systemie operacyjnym.

+1

spróbuj załadować pliki z kodu karty SD: webtemp.loadUrl ("file: //" + Environment.getExternalStorageDirectory() + "/assetssd/example.html); –

+2

Czy jesteś poważny ...? Ja byłem osobą który wysłał tę odpowiedź e-mailem>.> –

+1

Żart dnia !! dziękuję za zidentyfikowanie !! :)! Mój przyjaciel Tak, masz rację! :) Przepraszam za to! Nie widziałem pytanego nazwiska podczas komentowania !! ans is out !!, ale powyższy błąd "local ref table" został rozwiązany, ale "E/dalvikvm-heap (16169): Brak pamięci w alokacji 2310160-bajtów." Błąd nadchodzi !!! –

Odpowiedz

1

.destroy() -> Niszczy stan wewnętrzny tego WebView. Ta metoda powinna zostać wywołana po usunięciu tego WebView z systemu widoku.

Powiązane problemy