- public static void installOnIcsPlus(Application application, RefWatcher refWatcher) {
- ActivityRefWatcher activityRefWatcher = new ActivityRefWatcher(application, refWatcher);
- activityRefWatcher.watchActivities();
- }
创建了一个 ActivityRefWatcher ,大年夜家应当能感触感染到,这个器械就是用来监控我们的 Activity 泄漏状况的,它调用 watchActivities() 办法,就可以开端进行监控了。下面就是它监控的核心道理:
- public void watchActivities() {
- application.registerActivityLifecycleCallbacks(lifecycleCallbacks);
- }
它向 application 里注册了一个 ActivitylifecycleCallbacks 的回调函数,可以用来监听 Application 全部生命周期所有 Activity 的 lifecycle 事宜。再看下这个 lifecycleCallbacks 是什么?
- private final Application.ActivityLifecycleCallbacks lifecycleCallbacks = new Application.ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
- } @Override public void onActivityStarted(Activity activity) {
- } @Override public void onActivityResumed(Activity activity) {
- } @Override public void onActivityPaused(Activity activity) {
- } @Override public void onActivityStopped(Activity activity) {
- } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
- } @Override public void onActivityDestroyed(Activity activity) {
- ActivityRefWatcher.this.onActivityDestroyed(activity);
- }
- };
本来它只监听了所有 Activity 的>
可以看出,这个函数把目标 activity 对象传给了 RefWatcher ,让它去监控这个 activity 是否被正常收受接收了,若未被收受接收,则意味着产生了内存泄漏。
RefWatcher 若何监控 activity 是否被正常收受接收呢?
我们先来看看这个 RefWatcher 毕竟是个什么器械?
- public static RefWatcher androidWatcher(Context context, HeapDump.Listener heapDumpListener,
- ExcludedRefs excludedRefs) {
- AndroidHeapDumper heapDumper = new AndroidHeapDumper(context, leakDirectoryProvider);
- heapDumper.cleanup(); int watchDelayMillis = 5000;
- AndroidWatchExecutor executor = new AndroidWatchExecutor(watchDelayMillis);
推荐阅读
Linux 用户可能经常碰到的一个问题是,机械有 16GB 内存之多,运行的过程也不多,然则剩下的 free 内存并不多,大年夜部分都被 buff 和 cache 占用了(比如下面我的 PC)。$ free -h >>>详细阅读
本文标题:带你学开源项目:LeakCanary-如何检测 Activity 是否泄漏
地址:http://www.17bianji.com/lsqh/35385.html
1/2 1