1. 首页
  2. 移动开发
  3. Android
  4. Android LeakCanary检测内存泄露原理

Android LeakCanary检测内存泄露原理

上传者: 2022-05-31 15:52:22上传 PDF文件 109.82 KB 热度 23次

以LeakCanary2.6源码分析LeakCanary检测内存泄露原理,为减少篇幅长度,突出关键点,不粘贴大量源码,阅读时需搭配源码食用。如何获取contextLeakCanary只需引入依赖,不需要初始化代码,就能执行内存泄漏检测了,它是通过ContentProvider获取应用的context。如下AppWatcherInstaller在LeakCanary的aar包中manifest文件中注册。ActivityWatcherActivityWatcher中install方法通过向application注册Application.ActivityLifecycleCallbacks接口回调实现对Activity生命周期的检测。下面介绍Fragment,ViewModel,RootView和Service这些类对象是如何纳入检测的。FragmentAndViewModelWatcher先同样通过注册Application.ActivityLifecycleCallbacks回调,适时获取Activity引用,并在AndroidXFragmentDestroyWatcher获取Activity的supportFragmentManager,向其注册FragmentManager.FragmentLifecycleCallbacks。在spy ViewModel的onCleared回调中,纳入内存泄露检测。ServiceWatcher而Android中Service,无论是获取引用还是监测时机的确定都没有系统的回调可以依赖,LeakCanary都是采用Hook的方式达到目的。这些类纳入检测纳入检测的时机,可总结为如下表格:

用户评论