2019/7/19 看了资源监测机制 ResourceCanary
ResourceCanary的功能有两个:
- Activity泄露监测
- Bitmap冗余监测
基本原理是:
Activity泄露监测:
- 使用若引用包着avtivity实例
- 当activity onDestroy时,隔多时间主动执行以下GC,若activity没被回收,则认为是泄露
- 记录下泄露的activity并生成hprof文件
- 裁剪、打包保存hprof文件
- 分析hprof文件,当过第三方的haha算法,拿到activity的最短引用链
Bitmap冗余监测:
- 分析hprof文件,取得被gcroot引用到的bitmap列表
- 若是长度相同的bitmap,比较bitmap是否一致
备注:gcroot的种类包括:
- 类
- 活动的线程
- 局部变量和参数
- synchronized关键字引用的对象
- jniGlobalReference
- jniLocalReference