2012-02-14 47 views
6

最近、アセットまたはローカルディレクトリを使用してファイルからコードをオフにしてwebviewをロードすると、destroy()メソッドが呼び出されるとWebViewがメモリをリークします。私はそれを参照問題に絞り込んだ。プログラム/ webviewは元のビューのコピーを作成し、JNIテーブル内の参照を失います。これにより、最終的に512エントリ後にプログラムがクラッシュします。アセットを使用するとAndroid WebViewのメモリリークが発生する

私はこの記事を見ましたが、漏れのないウェブビューの修正は、アセットまたは外部フォルダのHTMLでは機能しないようです。アプリケーションは完全にサーバーベースであるとき

Memory leak in WebView

問題は存在しません。しかし、データを "同期"し、これらのビューでオフラインレポを更新できるようにするには、アプリケーションが必要です。

詳細情報:私はウェブビューを撮影して、スクロールできるようにViewPagerに配置しました。この問題は3.2.4/1には存在しませんでしたが、4.0.3に登場しました。私はJNI警告(エントリを見つけることができませんでした)の多くを取得し、ビューが破棄された後もまだ存在します。私はhprofを通してそれを見てきました。私は、HTMLが失われた変数に残っていることに気付きました。

この動作を修正する方法については、ご了承ください。

編集:クラッシュの

細目

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:

この問題を解決するには、SDカード、または他の記憶メカニズムからロードする必要があります。バグはJavascriptファイルがロードされても永続的ですが、Chromeで修正されているかわかりませんが、最新のOSでブラウザで修正されていないようです。

+1

SDカードコードからファイルを読み込もうとします:webtemp.loadUrl( "file://" + Environment.getExternalStorageDirectory()+ "/assetssd/example.html); –

+2

あなたは深刻ですか?この回答を電子メールで送った人>。 –

+1

今日のジョーク!!私は特定してくれてありがとう!! :)私の友人はいあなたは正しい!:)申し訳ありません!上記の "ローカルrefテーブル"エラーは解決されましたが、 "E/dalvikvm-heap(16169):2310160バイトの割り当てでメモリが不足しています"エラーが発生しました!!! –

答えて

1

.destroy() - >このWebViewの内部状態を破棄します。このWebViewがビューシステムから削除された後、このメソッドを呼び出す必要があります。

関連する問題