这给类功能比脚绫趋白,并且很重要!

ViewRootImpl
膳绫擎一向在说向FrameHandler中发消息,搞得神神秘秘的。接下来就来看看FrameHandler本尊。请在图中找到对应地位哦。
- private final class FrameHandler extends Handler {
- public FrameHandler(Looper looper) {
- super(looper);
- }
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_DO_FRAME:
- //开端回调Callback,以开端绘制下一帧内容
- doFrame(System.nanoTime(), 0);
- break;
- case MSG_DO_SCHEDULE_VSYNC:
- //请求一个Vsync旌旗灯号
- doScheduleVsync();
- break;
- case MSG_DO_SCHEDULE_CALLBACK:
- //实际也是请求一个Vsync旌旗灯号
- doScheduleCallback(msg.arg1);
- break;
- }
- }
- }
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
1/2 1

网友点评
精彩导读
科技快报
品牌展示