LeakCanary的使用

2019-08-01  本文已影响0人  wind_sky

一. 简介

LeakCanary是Square开源的一个分析内存泄漏的神器,它使用简单,功能强大,当程序出现内存泄漏时会在通知栏给出提示,


image.png

点击提示会进入泄漏详情页面


image.png

二. 使用

1. gradle中引用依赖

dependencies {
    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.2'
    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.2'
}

2. 在Application中设置

MyApplication

//Kotlin
class MyApplication : Application() {

    override fun onCreate() {
        super.onCreate()

        setupLeakCanary()
    }

    fun setupLeakCanary() {
        if (LeakCanary.isInAnalyzerProcess(this)) {
            return
        }
        enableStrictMode()
        LeakCanary.install(this)
    }

    fun enableStrictMode() {
        StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.Builder()
                .detectAll()
                .penaltyLog()
                .build())
    }
}

泄漏示例:

//Kotlin
class TestActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_test)

        start.setOnClickListener { v -> ruun() }
    }

    fun ruun() {
        object: AsyncTask<Void, Void, Void>() {     //匿名内部类
            override fun doInBackground(vararg params: Void?): Void? {
                SystemClock.sleep(20000)
                return null
            }
        }.execute()
    }

}

也可以使用LeakCanary监控Fragment的泄漏情况

public abstract class BaseFragment extends Fragment {

  @Override public void onDestroy() {
    super.onDestroy();
    RefWatcher refWatcher = ExampleApplication.getRefWatcher(getActivity());
    refWatcher.watch(this);
  }
}

3. 工作机制

上一篇下一篇

猜你喜欢

热点阅读