作家
登录

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

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

  •     public void scheduleVsync() { 
  •         ... 
  •         nativeScheduleVsync(mReceiverPtr); 
  •         //请求一个Vsync旌旗灯号 
  •     } 
  •  
  • 这给类功能比脚绫趋白,并且很重要!

    ViewRootImpl

    膳绫擎一向在说向FrameHandler中发消息,搞得神神秘秘的。接下来就来看看FrameHandler本尊。请在图中找到对应地位哦。

    1. private final class FrameHandler extends Handler { 
    2.     public FrameHandler(Looper looper) { 
    3.         super(looper); 
    4.     } 
    5.  
    6.     @Override 
    7.     public void handleMessage(Message msg) { 
    8.         switch (msg.what) { 
    9.             case MSG_DO_FRAME: 
    10.                 //开端回调Callback,以开端绘制下一帧内容 
    11.                 doFrame(System.nanoTime(), 0); 
    12.                 break; 
    13.             case MSG_DO_SCHEDULE_VSYNC: 
    14.                 //请求一个Vsync旌旗灯号 
    15.                 doScheduleVsync(); 
    16.                 break; 
    17.             case MSG_DO_SCHEDULE_CALLBACK: 
    18.                 //实际也是请求一个Vsync旌旗灯号 
    19.                 doScheduleCallback(msg.arg1); 
    20.                 break; 
    21.             } 
    22.         } 
    23.     }  

    FrameHandler重要在UI线程处理3种类型的消息。

    • MSG_DO_FRAME:值为0。当接收到一个Vsync旌旗灯号时会发送该种类型的消息,然后开端回调CallbackQueue[]中的Callback。比瘸琅绫擎说过,在ViewRootImpl有两个重要的Callback,FrameCallback(请求Vsync并再次注册回调)和TraversalRunnable(履行doTraversal()开端绘制界面)频繁被注册。
    • MSG_DO_SCHEDULE_VSYNC:值为1。当须要请求一个Vsync消息(即屏幕上的内容须要更新时)会发送这个消息。接收到Vsync后,同上一步。
    • MSG_DO_SCHEDULE_CALLBACK:值为2。请求回调一个Callback。实际上会先请求一个Vsync旌旗灯号,然后再发送MSG_DO_FRAME消息,然后再回调。

    WindowManager是在Activity履行attach()时被创建的,attach()办法是在onCreate()之前被调用的。关于Activity的创建可以看看我的┞封篇:【可能是史上最简单的!一张图3分钟让你明白Activity启动流程,不看懊悔!http://www.jianshu.com/p/9ecea420eb52】。

    SurfaceFlinger和Surface简单说

    在介绍Vsync的时刻,我们可能已经看到了,如今Android体系会将HW_VSYNC虚拟化为两个Vsync旌旗灯号。一个是VSYNC,被发送给膳绫擎一向在讲的Choreographer,用于触发视图树的绘制衬着。另一个是SF_VSYNC,被发送给我接下来要讲的SurfaceFlinger,用于触发Surface的合成,即各个Window窗口画面的合成。接下来我们就R单的看下SurfaceFlinger和Surface。因为这部分根本是c++编写的,我侧重讲道理。


      推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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