2012-02-14 13 views
6

Ho notato recentemente che quando carico una webview basata su codice da un file (utilizzando risorse o una directory locale), WebView perde la memoria una volta chiamato il metodo destroy() . L'ho ristretto a un problema di referenziazione. Il programma/webview fa copie della vista originale e perde i riferimenti nella tabella JNI - questo alla fine causa il crash del programma dopo 512 voci.Perdita di memoria di WebView Android durante l'utilizzo di risorse

Ho visto questo articolo, ma la correzione senza perdita di webview non sembra funzionare con HTML nelle risorse o nelle cartelle esterne.

Memory leak in WebView

Il problema non esiste quando l'applicazione è interamente basato assistente; ma, ho bisogno che l'applicazione sia in grado di "sincronizzare" i dati e aggiornare il repository offline con queste visualizzazioni.

Ulteriori informazioni: Ho preso le visualizzazioni Web e le ho inserite in un ViewPager per consentire lo scorrimento. Questo problema non esisteva in 3.2.4/1, ma è apparso in 4.0.3. Ricevo molti avvisi JNI, (non ho trovato la voce) e continuano a esistere anche dopo la distruzione delle viste. L'ho guardato attraverso l'hprof e ho notato che l'HTML rimane residuo nelle variabili perse.

Qualsiasi luce su come correggere questo comportamento sarebbe apprezzata.

Edit:

Specifiche sul crollo

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:

Per risolvere questo problema, è necessario caricare dalla scheda SD, o qualche altro meccanismo di stoccaggio. Il bug è permanente quando viene caricato un file Javascript, non so se è stato risolto in Chrome, ma non sembra essere stato corretto nel browser nel nuovo sistema operativo.

+1

provare a caricare i file dal codice della scheda SD: webtemp.loadUrl ("file: //" + Environment.getExternalStorageDirectory() + "/assetssd/example.html); –

+2

Sei serio ...? Ero la persona chi ha scritto per email questa risposta>.> –

+1

Joke del giorno !! grazie per l'identificazione !! :)! Il mio amico Sì hai ragione! :) scusa per quello! Non ho visto il nome richiesto mentre commentavo !! infine il è uscito !! ma l'errore "tabella di riferimento locale" sopra riportato è stato risolto ma "E/dalvikvm-heap (16169): Memoria esaurita su un'assegnazione di 2310160 byte." Arriva l'errore !!! –

risposta

1

.destroy() -> Distrugge lo stato interno di questa WebView. Questo metodo dovrebbe essere chiamato dopo che questa WebView è stata rimossa dal sistema di visualizzazione.