Framework 窗口添加流程分析1之 ViewRootImpl 创建

Framework 窗口添加流程分析1之 ViewRootImpl 创建

ActivityThread.handleResumeActivity()

// 第一部分析: 执行resumed流程,回调 Activity.onResume()

-> ActivityThread.performResumeActivity()

​ -> Activity.performResume()

​ -> Activity.dispatchActivityPreResumed()

​ -> Instrumentation.callActivityOnResume()

​ -> Activity.onResume()

​ -> FragmentController.dispatchResume()

​ -> Activity.dispatchActivityPostResumed()

​ -> ActivityThread.reportTopResumedActivityChanged()

// 第二部分析: 添加窗口,绘制应用界面,使 activity 可见

-> Activity.makeVisible()

​ -> WindowManagerImpl.addView()

​ -> WindowManagerGlobal.addView()

​ -> new ViewRootImpl()

​ -> DecorView.setLayoutParams()

​ -> ViewRootImpl.setView()

​ // 第三部分析: View 的绘制

​ -> ViewRootImpl.requestLayout()

​ -> checkThread() // 检查线程是不是创建 ViewRootImpl 的原始线程(可以大概理解为主线程)

​ -> mLayoutRequested = true

​ -> scheduleTraversals()

​ -> mHandler.getLooper().getQueue().postSyncBarrier()

​ -> mChoreographer.postCallback(Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable)

​ -> mHandler.getLooper().getQueue().removeSyncBarrier(mTraversalBarrier);

​ -> performTraversals()

​ -> performMeasure()

​ -> performLayout()

​ -> performDraw()

​ -> Session.addToDisplayAsUser() // Binder call

​ -> WMS.addWindow()

​ -> DecorView.setVisibility()

// frameworks/base/core/java/android/app/ActivityThread.java
@Override
public void handleResumeActivity(IBinder token, boolean finalStateRequest, boolean isForward,String reason) {
   
    // 省略部分
    // 这里会执行resumed相关流程,同时会回调 Activity.onResume()
    final ActivityClientRecord r = performResumeActivity(token, finalStateRequest, reason);
    if (r == null) {
   
        // We didn't actually resume the activity, so skipping any follow-up actions.
        return;
    }
    final Activity a = r.activity;

    if (!r.activity.mFinished && willBeVisible && r.activity.mDecor != null && !r.hideForNow) {
   
        // 省略部分
        r.activity.mVisibleFromServer = true;
        mNumVisibleActivities++;
        if (r.activity.mVisibleFromClient) {
   
            // 添加窗口,绘制应用界面,使 activity 可见
            r.activity
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值