美文网首页
使用Android LeakCanary检测内存泄露

使用Android LeakCanary检测内存泄露

作者: hao_developer | 来源:发表于2020-10-31 18:58 被阅读0次

    这个东西特别简单,直接看官网就行了

    就是GitHub地址:https://github.com/square/leakcanary

    直接集成:

    dependencies {
      debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'
      releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.3'
      // Optional, if you use support library fragments:
      debugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.3'
    }
    

    直接在Application中使用,然后运行APP就会自动检测,检测到会在另一个APP上通知,显示详情

    public class ExampleApplication extends Application {
    
      @Override public void onCreate() {
        super.onCreate();
        if (LeakCanary.isInAnalyzerProcess(this)) {
          // This process is dedicated to LeakCanary for heap analysis.
          // You should not init your app in this process.
          return;
        }
        LeakCanary.install(this);
        // Normal app init code...
      }
    }
    

    举个栗子

    以匿名内部类为例,操作流程和之前的例子一样;正常来讲调用了finish()方法,第二个Activity会被销毁的,但是因为使用了匿名内部类,所以sRunnable会持有Main2Activity的引用,而且sRunnable还是一个静态变量,所以会导致Main2Activity不会被回收掉

    public class Main2Activity extends AppCompatActivity {
        private static Thread sRunnable;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
    
            sRunnable = new Thread() {
                @Override
                public void run() {
                }
            };
            
            findViewById(R.id.btn_back).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    finish();
                }
            });
    
        }
    }
    

    运行程序,然后过一会儿就会收到提醒,检测到了内存泄漏,打开看看;大概意思就是说sRunnable这个对象,它引用了Main2Activity,导致了内存泄漏;这个工具的确非常的简单友好了

    image.png

    相关文章

      网友评论

          本文标题:使用Android LeakCanary检测内存泄露

          本文链接:https://www.haomeiwen.com/subject/knturktx.html