WebView が埋め込まれた xml レイアウトを使用するアクティビティがあります。私はアクティビティ コードで WebView をまったく使用していません。xml レイアウトに座って表示されているだけです。
アクティビティを終了すると、アクティビティがメモリから消去されていないことに気付きました。(hprof ダンプで確認します)。xml レイアウトから WebView を削除すると、アクティビティは完全にクリアされます。
私はすでに試しました
webView.destroy();
webView = null;
私の活動の onDestroy() で、しかしそれはあまり役に立ちません。
私の hprof ダンプでは、アクティビティ (「ブラウザ」という名前) には次の残りの GC ルートがあります (呼び出しdestroy()
た後):
com.myapp.android.activity.browser.Browser
- mContext of android.webkit.JWebCoreJavaBridge
- sJavaBridge of android.webkit.BrowserFrame [Class]
- mContext of android.webkit.PluginManager
- mInstance of android.webkit.PluginManager [Class]
別の開発者が同様のことを経験したことがわかりました。Filipe Abrantes の返信を参照してください: http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/
確かに非常に興味深い投稿です。最近、Android アプリのメモリ リークのトラブルシューティングに非常に苦労しました。最終的に、私の xml レイアウトには、使用されていなくても、画面の回転/アプリの再起動後にメモリが g-collected されるのを妨げていた WebView コンポーネントが含まれていることが判明しました...これは現在の実装のバグですか、それとも何かありますか? WebViews を使用するときに行う必要がある特定の
残念ながら、この質問についてブログやメーリング リストにはまだ回答がありません。したがって、SDK のバグ (報告されたhttp://code.google.com/p/android/issues/detail?id=2181の MapView バグに似ている可能性があります) か、アクティビティを完全に取得する方法を考えています。ウェブビューが埋め込まれたメモリをオフにしますか?