作家
登录

用两张图告诉你,为什么你的App会卡顿?

作者: 来源: 2017-06-01 08:56:06 阅读 我要评论

  •     //CALLBACK_LAST值为3。 
  •     for (int i = 0; i <= CALLBACK_LAST; i++) { 
  •         mCallbackQueues[i] = new CallbackQueue(); 
  •     } 
  •  
    1. private void scheduleFrameLocked(long now) { 
    2.     ... 
    3.     //先断定当前是不是在UI线程 
    4.     if (isRunningOnLooperThreadLocked()) { 
    5.         scheduleVsyncLocked(); 
    6.         //是UI线程就请求一个Vsync旌旗灯号 
    7.     } else { 
    8.         Message msg = mHandler.obtainMessage(MSG_DO_SCHEDULE_VSYNC); 
    9.         msg.setAsynchronous(true); 
    10.         mHandler.sendMessageAtFrontOfQueue(msg); 
    11.         //不在UI线程向FrameHandler发送一个MSG_DO_SCHEDULE_VSYNC消息 
    12.         //来请求一个Vsync旌旗灯号 
    13.     } 
    14.  
    15. private void scheduleVsyncLocked() { 
    16.     mDisplayEventReceiver.scheduleVsync(); 
    17.     //经由过程DisplayEventReceiver请求一个Vsync旌旗灯号 
    18.     //这是个恨角色,待会儿会聊聊它。 
    19.     //MSG_DO_SCHEDULE_VSYNC消息也是经由过程调用这个办法请求Vsync旌旗灯号的。 
    20.  

    膳绫擎我们提到过,Choreographer在一个线程中只有一个。所以,如不雅在其它线程,须要经由过程Handler来切换到UI线程,然后再请求Vsync旌旗灯号。

    下面看看方才出场的mDisplayEventReceiver是个什么鬼?

    1. private final class FrameDisplayEventReceiver extends DisplayEventReceiver 
    2.     implements Runnable { 
    3.  
    4.     //这个办法用于接收Vsync旌旗灯号 
    5.     public void onVsync(){ 
    6.         ... 
    7.         Message msg = Message.obtain(mHandler, this); 
    8.         msg.setAsynchronous(true); 
    9.         mHandler.sendMessageAtTime(msg, timestampNanos / TimeUtils.NANOS_PER_MS); 
    10.         //这里并没有设置消息的类型 
    11.         //其实就是默认为0,即MSG_DO_FRAME类型的消息 
    12.         //它其实就是通知Choreographer开端回调CallbackQueue[]中的Callback了 
    13.         //也就是开端绘制下一帧的内容了 
    14.     } 
    15.  
    16.     //这个办法是在父类中的,写在这便利看 

        推荐阅读

        换个角度看看,为什么钓鱼攻击总能成功?

      当我第一次收到银行发来的“安然”邮件时,我第一反竽暌功就是这里是否有诈?因为在我看来,它实袈溱是太像垂纶邮件了。这封躺在收件箱里的邮件来源竽暌冠我银行经理的小我邮箱地>>>详细阅读


      本文标题:用两张图告诉你,为什么你的App会卡顿?

      地址:http://www.17bianji.com/lsqh/35508.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)