[leakcanary]メモリリーク検出
leakcanaryはsquare社のandroidメモリ漏洩フレームワークで、MATツールに比べて使いやすく、android studioに導入するのに便利です.メモリの漏洩がどこで発生したかを通知することで、直感的に知ることができます.
インポート方法:Moduleの構成:app->build.gradleファイル、次の依存を追加
使用方法:アプリケーションのonCreateメソッドで初期化
以下は筆者の使用中のサンプル画像です.
メモリ漏洩が発生すると、通知が自動的にポップアップされます.一番下の行がメモリ漏洩を発生させる場所であることがわかります.GoodsDetailActivityというインスタンスがメモリ漏洩を発生させることを意味します.
下から上を見ると,メモリ漏洩の原因が分かり,最後から2行目にmContextを提示し,さらに上を見るとmInstanceがあり,これは筆者がPopGoodsdetailSpecというクラスを書く際に用いた単例である.ここを見ると、はっきりとわかりますよ.単例を使用してactivityにcontextの参照を持っていたため、activityがGC内で回収できず、メモリ漏洩が発生した.この場合、この単例によるメモリ漏洩を解決すればよい.
contextの役割がまだ分からない場合は、なぜcontextがメモリの漏洩をもたらすのか、単例のライフサイクルは、この文書を参照することをお勧めします:[Androidソース分析-Context Contextを全面的に理解する]http://blog.csdn.net/singwhatiwanna/article/details/21829971
[Android Context完全解析、あなたが知らないContextの詳細]http://blog.csdn.net/guolin_blog/article/details/47028975
インポート方法:Moduleの構成:app->build.gradleファイル、次の依存を追加
dependencies { debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta1' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta1' }
使用方法:アプリケーションのonCreateメソッドで初期化
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
LeakCanary.install(this);
}
}
以下は筆者の使用中のサンプル画像です.
メモリ漏洩が発生すると、通知が自動的にポップアップされます.一番下の行がメモリ漏洩を発生させる場所であることがわかります.GoodsDetailActivityというインスタンスがメモリ漏洩を発生させることを意味します.
下から上を見ると,メモリ漏洩の原因が分かり,最後から2行目にmContextを提示し,さらに上を見るとmInstanceがあり,これは筆者がPopGoodsdetailSpecというクラスを書く際に用いた単例である.ここを見ると、はっきりとわかりますよ.単例を使用してactivityにcontextの参照を持っていたため、activityがGC内で回収できず、メモリ漏洩が発生した.この場合、この単例によるメモリ漏洩を解決すればよい.
contextの役割がまだ分からない場合は、なぜcontextがメモリの漏洩をもたらすのか、単例のライフサイクルは、この文書を参照することをお勧めします:[Androidソース分析-Context Contextを全面的に理解する]http://blog.csdn.net/singwhatiwanna/article/details/21829971
[Android Context完全解析、あなたが知らないContextの詳細]http://blog.csdn.net/guolin_blog/article/details/47028975