笔记-内存泄漏

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的执行时间,进而判断是否发生丢帧

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值