私のアプリには、A と B という 2 つのアクティビティがあります。
アクティビティ A:
アイテムに関する情報を簡単に表示するリストがあります。A の項目をクリックすると、Activity B が読み込まれます。
アクティビティ B:
2 つの Web ビューといくつかのリストビューがあります。アクティビティの上部はヘッダー Web ビューで占められています。アクティビティの下部にはタブ ホストがあり、これは最初のタブで 2 番目の Web ビューをホストし、残りのタブはそれぞれリスト ビューをホストします。
問題:
ユーザーが A から B に移動すると、ヒープ サイズが大幅に増加します。B から A に戻った後でも、ヒープ サイズは同じままです。バイトの減少すらありません。実際、時々増加します。はい、これらの Web ビューが原因です。SO や他のサイトでの Web ビューのメモリ リークについて読みました。ここに記載されているアプローチに従いました
- コンテナー [RelativeLayout] 内に Web ビューを動的に追加しました。アクティビティ onDestroy の webview を削除しました
- SO記事で提案されているサブクラスのWebビュー
- 毎回Webビューのキャッシュをクリアするなど
ヒープ サイズがどのようなものであっても、B に移動する前の状態に戻ることはありません。
誰かが私を可能な修正に導くことができれば本当に感謝しています
ノート:
私はすでにこれを読んでおり、SOでこの問題をフォローしています。 WebView でのメモリ リーク
編集:
BでWebビューなしで試してみましたが、ヒープサイズの増加は約0.5 MBと非常に少なくなっていますが、Webビューでは4〜5 MB増加します
ヒープサイズのログ (ここに記載されている提案に従って取得)
onCreate B
debug.heap native: allocated 4.11MB of 4.17MB (0.01MB free) in []
debug.memory: allocated: 12.00MB of 96.00MB (1.00MB free)
onDestroy B
debug.heap native: allocated 8.66MB of 10.08MB (0.48MB free) in []
debug.memory: allocated: 12.00MB of 96.00MB (1.00MB free)
on Resume A
debug.heap native: allocated 7.94MB of 10.08MB (1.32MB free) in []
debug.memory: allocated: 12.00MB of 96.00MB (0.00MB free)
B が開始されて破棄される前後にヒープ ダンプを取得して数値をクロス チェックしました。ヒープ サイズは、ログで取得したものにかなり近いものです