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. View的绘制流程梳理
  2. Android群英传之Android绘图机制与处理技巧
  3. Android中SurfaceView的使用
  4. Android(安卓)Canvas绘图详解【转】
  5. Android搜索框SearchView属性和用法详解
  6. Android实现列表时间轴
  7. Android(安卓)自定义View探索——图片
  8. 关于Android中Service的onDestory()调用时机
  9. Android(安卓)Shape绘制实用圆圈

随机推荐

  1. SDK中模拟器创建命令行!!!
  2. 设置listview的背景颜色
  3. 监听Android应用程序是否卸载成功
  4. Android跨进程通信传输大数据
  5. Android(安卓)ProgressDialog的两种用法
  6. android activity onSearchRequested()
  7. android 访问SD卡
  8. 2011.09.07(5)——— android 跨进程通信之
  9. 【Android源码分享】 android 控件的移动
  10. Android屏幕尺寸适配注意事项