web-dev-qa-db-ja.com

新しいAndroidProfilerを使用してメモリリークを処理する方法

アプリのメモリリークを特定して処理する方法を学習しようとしています。私はこれを読んでいます 素晴らしい記事 、しかし私はAndroid Studioに付属している新しい「AndroidProfiler」ツールでそれを適用する方法について少し混乱しています3.0。

私はテストアプリケーションを持っていますが、LeakCanaryは私のアプリにメモリリークがあることを指摘しています。

実際、プロファイラーを実行して「dump Java heap」を押すと、MyCollectionActivityのインスタンスが4つあることがわかります。これらのインスタンスをクリックすると、詳細が表示されます。

enter image description here

しかし、記事に示されているツールには、「Androidプロファイラー」では表示できないオプションがあります。

巨大なメモリヒープをナビゲートする方法については詳しく説明しません。代わりに、下のスクリーンショットの右上隅にあるアナライザータスクに注意を向けます。上記の例で導入されたメモリリークを検出するために必要なことは、[リークされたアクティビティの検出]をオンにしてから、再生を押してリークされたアクティビティを分析結果に表示することです。

たとえば、新しいツールで、リークのあるインスタンスを示すこの「アナライザータスク」と「分析結果」はどこにありますか?

enter image description here

リークされたアクティビティを選択すると、アクティビティを存続させている参照を特定できる参照ツリーが表示されます。深さがゼロのインスタンスを探すと、ロケーションマネージャー内にあるインスタンスmListenerが、アクティビティをガベージコレクションできない理由であることがわかります。

そのAndroidプロファイラーの画像はその参照ツリーも示していません。参照を示していますが、あまり有用ではないようです。

7
alexpfx
  1. まず、保存ヒープダンプする必要があります。拡張子hprofでダンプを保存します。このファイルを保存するには、以下の添付画像を確認してください。
  2. 同じファイルをAndroid Studioで開きます。その後、Analyser Tasksオプションが表示されます。右上隅。

enter image description here

8
Shanki Bansal