Activity中SetContentView流程(笔记)

setContentView方法在Android应用中用于设置活动的视图内容。它会涉及到PhoneWindow对象的创建,通过installDecor和generateDecor方法生成DecorView,这是一个FrameLayout。然后,通过LayoutInflate.inflate解析并添加布局到contentParent。对于AppCompatActivity,流程类似,但会创建subdecor,并处理子view的添加和ID的设定。
  1. setContentView会调用getWindow().setContentView(),getWindow其实是PhoneWindow对象,在ActivityThread.performLauncherActivity方法反射创建activity的时候会调用activity.attach(),在attach方法里会创建PhoneWindow对象。
  2. 在PhoneWindow的setContentView里面会判断mContentParent==null,mContentParent也就是那个id=android.R.id.content,如果=null会调用installDecor方法。
  3. 在installDecor会调用generateDecor方法来创建DecorView,实际上就是一个FrameLayout,接着会调用generateLayout来创建contentParent,创建完之后通过LayoutInflate.inflate解析我们传进来的布局ID,添加到contentParent里面。

 

 AppCompatActivity的setContentView流程

  1. 调用流程:AppCompatDelegateImpl.setContentView()->ensureSubDecor()->createSubDecor()->mWindow.getDecorView()这里就是调用phoneWindow的getDecorView(),接着会调用installDecor()流程和上面一样创建DecorView和ContentParent。
  2. 创建了subdecor之后,会获取到通过findViewById获取到android.R.id.content,然后遍历删除子view,添加到subdecor里面,接着设置ID为NO_ID,把subdecor的ID设置为android.R.id.content,最后也是通过LayoutInflate.inflate解析我们传进来的布局ID

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值