【高级UI】学习笔记(7.30)

App启动流程

在这里插入图片描述
安卓main方法的加载关系到四个进程,Launcher、ss、Zygote、App。

1.首先Launcher收集当前app上下文,,然后找到ss进程的AMS,Ams请求Zygote进程fork一个新的app进程,然后会调用ActivityThread里的main。
2.以上是main启动之前的工作。本质上是AMS和ActivityThread两个类协作完成生命周期的调用。
3.main加载后进行attach通过binder机制调用AMS,直接把ActivityThread生成了一个对象发给了AMS。知道这是main方法基本没干啥事,实际上主要工作是AMS给ActivityThread发送了一个scheduleLaunchActivity(startActivityNow)。这是activity的信息包,实际上是在进行handler信息通信。
4.performLaunchActivity用于通知ActivityThread中的handleLaunchActivity根据switch-case创建Activity,创建过程是通过反射getclass。
5.activity创建之后,handler调用performLaunchActivity,它会调用callActivityOncreate,又会调用Activity.performOnCreate,最后调用onCreate()。
6.AMS主要负责的是监控状态并进行变更,触发之后发送一条handler消息进行处理。

setContentView()

我们创建了一个空的activity之后,它其实没有界面,所以需要一个view,这个view就是phoneWindow,已经创建了但是没有内容。

 public void setContentView(int resId) {
        ensureSubDecor();    //根视图
        ViewGroup contentParent = mSubDecor.findViewById(android.R.id.content);   
        //ViewGroup是一种特殊的View,是布局和视图容器的基类。
        contentParent.removeAllViews();
        LayoutInflater.from(mContext).inflate(resId, contentParent);
        mAppCompatWindowCallback.getWrapped().onContentChanged();
    }

inflate递归加载布局,把xml文件都加载到phoneWindow,然后调用onContentChanged()。

DecorView添加到Window过程

在onResume加载在这里插入图片描述
performTraversals()负责具体的测量、布局、绘制。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值