笔记-内存泄漏

leakCanary原理:创建weakReference的时候可以传入一个自定义的ReferenceQueue,当WeakReference被回收时,WeakReference的引用就会传入到queue中。我们创建activity的时候,创建一个WeakReference包含自定义哥的queue指向它,并使用一个set去保存这些WeakReference,当activity被销毁的时候(onDestroy),执行GC,再通过回调遍历所有的queue,并将set中包含被遍历的引用删除,此时还留在set中的就是内存泄漏的activity

for(Item item :set){
       if(queue.contains(item)){
                set.delete(item);
       }
}
return set;
伪代码如上

 

Vsync信号每次只能触发一次以减少触发绘制的操作,比如,setText,或者invalidate都会触发scheduleTraversals,然后订阅Vsync信号,即nativeScheduleVsync。动画是在上一帧绘制完成后,立刻再进行一次Vsync订阅,即完成屏幕的不断绘制

Choreographer:
承上:接受应用的callback输入,包括input,animation,traversal绘制,缓存在Choreographer中的CallbackQueue中。
启下:内部FrameDisplayEventReceiver会接收硬件层发出的vsync信号,接收到该信号->onVsync->doFrame->doCallback将      缓存的TraversalRunnable取出并调用它的run

Choreographer.getInstance().postFrameCallback添加自定义callback,监听doFrame的执行时间,进而判断是否发生丢帧
笔记-内存泄漏_第1张图片

 

你可能感兴趣的:(Android,android)