最近、アセットまたはローカルディレクトリを使用してファイルからコードをオフにしてwebviewをロードすると、destroy()メソッドが呼び出されるとWebViewがメモリをリークします。私はそれを参照問題に絞り込んだ。プログラム/ webviewは元のビューのコピーを作成し、JNIテーブル内の参照を失います。これにより、最終的に512エントリ後にプログラムがクラッシュします。アセットを使用するとAndroid WebViewのメモリリークが発生する
私はこの記事を見ましたが、漏れのないウェブビューの修正は、アセットまたは外部フォルダのHTMLでは機能しないようです。アプリケーションは完全にサーバーベースであるとき
問題は存在しません。しかし、データを "同期"し、これらのビューでオフラインレポを更新できるようにするには、アプリケーションが必要です。
詳細情報:私はウェブビューを撮影して、スクロールできるように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でブラウザで修正されていないようです。
SDカードコードからファイルを読み込もうとします:webtemp.loadUrl( "file://" + Environment.getExternalStorageDirectory()+ "/assetssd/example.html); –
あなたは深刻ですか?この回答を電子メールで送った人>。 –
今日のジョーク!!私は特定してくれてありがとう!! :)私の友人はいあなたは正しい!:)申し訳ありません!上記の "ローカルrefテーブル"エラーは解決されましたが、 "E/dalvikvm-heap(16169):2310160バイトの割り当てでメモリが不足しています"エラーが発生しました!!! –