アプリのメモリリークを特定して処理する方法を学習しようとしています。私はこれを読んでいます 素晴らしい記事 、しかし私はAndroid Studioに付属している新しい「AndroidProfiler」ツールでそれを適用する方法について少し混乱しています3.0。
私はテストアプリケーションを持っていますが、LeakCanaryは私のアプリにメモリリークがあることを指摘しています。
実際、プロファイラーを実行して「dump Java heap」を押すと、MyCollectionActivityのインスタンスが4つあることがわかります。これらのインスタンスをクリックすると、詳細が表示されます。
しかし、記事に示されているツールには、「Androidプロファイラー」では表示できないオプションがあります。
巨大なメモリヒープをナビゲートする方法については詳しく説明しません。代わりに、下のスクリーンショットの右上隅にあるアナライザータスクに注意を向けます。上記の例で導入されたメモリリークを検出するために必要なことは、[リークされたアクティビティの検出]をオンにしてから、再生を押してリークされたアクティビティを分析結果に表示することです。
たとえば、新しいツールで、リークのあるインスタンスを示すこの「アナライザータスク」と「分析結果」はどこにありますか?
リークされたアクティビティを選択すると、アクティビティを存続させている参照を特定できる参照ツリーが表示されます。深さがゼロのインスタンスを探すと、ロケーションマネージャー内にあるインスタンスmListenerが、アクティビティをガベージコレクションできない理由であることがわかります。
そのAndroidプロファイラーの画像はその参照ツリーも示していません。参照を示していますが、あまり有用ではないようです。