WebViewのメモリリーク
質問
WebViewが埋め込まれているxmlレイアウトを使用しているアクティビティがあります。私は私の活動コードでWebViewを全く使用していません、それはすべて私のxmlレイアウトにそこに座っていて、目に見えることです。
今、私が活動を終了するとき、私は私の活動がメモリからクリアされないことを発見します。(hprof ダンプで確認しました)。xml レイアウトから WebView を削除すると、アクティビティは完全にクリアされますが。
私はすでに
webView.destroy();
webView = null;
を私のアクティビティのonDestroy()に追加しましたが、これはあまり役に立ちません。
私のhprofダンプでは、私の活動('Browser'という名前)は、以下の残りの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]
他の開発者が同じようなことを経験していることがわかりました。 http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/
確かに非常に興味深い記事です。 最近、私は非常に苦労しました。 をトラブルシューティングするのに非常に苦労しました。 トラブルシューティングに非常に苦労しました。最終的に、それは判明しました。 xmlレイアウトにWebViewコンポーネントが含まれていて コンポーネントが含まれており、それが使われていないにもかかわらず メモリリークを防いでいることがわかりました。 gが収集されるのを防いでいました。 これは現在の実装のバグなのでしょうか? これは現在の実装のバグでしょうか、それとも 現在の実装のバグなのか、それとも WebViewsを使用する場合
さて、残念ながら、この質問についてブログやメーリングリストではまだ回答がありません。したがって、SDK のバグではないかと考えています (おそらく、報告された MapView のバグに類似しています)。 http://code.google.com/p/android/issues/detail?id=2181 ) か Webビューを埋め込んだアクティビティをメモリから完全に取り除く方法 ?
どのように解決するのですか?
XMLレイアウトを介してWebViewを作成するとき、アクティビティは、アプリケーションコンテキストではなく、WebViewのコンテキストとして渡されます。アクティビティを終了するとき、WebViewはまだアクティビティへの参照を保持し、したがって、アクティビティはメモリから削除されません。 私はそれのためのバグレポートを提出しました、上記のコメントのリンクを参照してください。
webView = new WebView(getApplicationContext());
この回避策は特定のユースケースにしか使えないことに注意してください。例えば、href-link やダイアログなどへのリンクなしに、html を webview に表示する必要がある場合です。以下のコメントを参照してください。
関連
-
[解決済み] Androidのウェブビューでloadurlを呼び出すとブラウザが起動する
-
[解決済み] WebViewがURLの読み込みを終了したことを確認する方法は?
-
[解決済み] プログラムでソフトキーボードを開く
-
[解決済み] AppCompat-v7 21でアクションバー/ツールバーにアイコンを表示する。
-
[解決済み] データベースでリサイクルビューを使用する
-
[解決済み] ArrayList<MyCustomClass>をJSONArrayに変換する。
-
[解決済み] Androidアプリケーションのヒープサイズを大きくするには?
-
[解決済み] Android StudioからADBを手動で再起動する方法
-
[解決済み] フラグメント間の値の受け渡し方法
-
[解決済み] google-services.jsonって実際何してるの?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] FloatingActionButtonのサンプルとサポートライブラリ
-
[解決済み] Android Studioの「未実装メソッドの追加」機能
-
[解決済み] 通知をクリックした後にアプリケーションを開く
-
[解決済み] Android StudioからADBを手動で再起動する方法
-
[解決済み] Gradleでビルドタイプを使用し、ContentProviderを使用する同じアプリを1つのデバイスで実行する。
-
[解決済み] 非推奨のandroid.support.v4.app.ActionBarDrawerToggleの置き換え方法
-
[解決済み] AsyncTaskLoaderとAsyncTaskの比較
-
[解決済み] google-services.jsonって実際何してるの?
-
[解決済み] LayoutParamsの高さを密度に依存しないピクセル数でプログラム的に設定する。
-
[解決済み] Google Play ストア内部テストのロールアウトが開始できない