LeakCanary 1.6
2019-01-30 15:48:50 0 举报
leakcanary源码时序图
作者其他创作
大纲/内容
7.execute
9.postToBackgroundWithDelay
23.findLeakingReference
2.新建RefWatcher并传入3
2.buildAndInstall
12.removeWeaklyReachableReferences
20.onHandleIntentInForeground
19.runAnalysis
5.a.生成随机字符串keyb.将key加入retainedKeysc.新建KeyedWeakReference并关联queue
18.analyze
AndroidRefWatcherBuilder
4.通过Application的ActivityLifecycleCallbacks的onActivityDestroyed进行回调
14.调用系统APIDebug.dumpHprofData将内存泄漏信息写入dump文件
19.启动dump文件分析服务DisplayLeakService
AndroidWatchExecutor
10.返回RETRY则继续递归
DefaultLeakDirectoryProvider
13.gone
10.run
16.listFiles
21.解析Hprof文件成Snapshot
18.分析产生的dump文件
26.当前步骤分析完毕后会删除heapDump文件
21.checkForLeak
17.cleanupOldHeapDumps
9.懒加载时回调a.在子线程中postDelayedb.不断递归,时间间隔指数增长
16.在SD卡/Download/leakcanary-包名应用data/leakcanary中寻找\"_pending.hprof\"结尾的文件集合
RefWatcher
11.传入的时间为Destroy时间a.移除已被回收keyb.判断当前引用是否已经被回收c.执行GC回收d.再次移除已被回收keye.再次判断当前引用是否已经被回收
5.watch
22.deduplicateGcRoots
11.ensureGone
28.saveResult
14.如果弱应用对象无法释放a.弹出Toast和发出通知b.将泄漏信息写入dumpc.关闭Toast和通知
AndroidHeapDumper
LeakCanary
ServiceHeapDumpListener
3.install
3.新建ActivityRefWatcher
26.onHeapAnalyzed
27.renameHeapdump
DisplayLeakService
RefWatcher非静态内部类
7.往主线程的Idle中添加懒加载任务,子线程中需要切换线程
4.watch
HeapAnalyzer
5.通过activity的.getFragmentManager().registerFragmentLifecycleCallbacks()注册Fragment生命周期监听
6.ensureGoneAsync
HeapAnalyzerService
ActivityRefWatcher
12.移除已被回收keya.poll()出已被移除对象b.从retainedKeys中移除被移除的Key
25.sendResultToListener
13.判断retainedKeys中是否还有reference.key
Retryable
15.a.寻找dump文件b.判断dump文件修改时间(上次分析间隔)是否超过10分钟,未超过则重试c.删除旧的dump文件d.创建dump文件
14.dumpHeap
1.install
6.传入当前时间
15.newHeapDumpFile
8.waitForIdle
24.findLeakTrace
0 条评论
回复 删除
下一页