Android View加载过程

说了最近会给大家分享一些比较好的技术点,(大佬绕道请关门)最近学的Android View,分为三次博客分享,这一次我分享一下View的加载过程

准备荧光棒

众所周知,我们Android的View加载过程在as中是不能很好的去查看的,所以会用到工具Source Insight 4.0
破解版网址Source Insight 4.0破解版
下载Android源码Android4.4源码
提取码:k8hi
Android8.0太大了,我怕你不太想下
中国是有很多高手的,不然那么多外挂和破解版哪里来的,嘿嘿

跟随脚步不要停

1.打开我们的工具搜索Acivity.java
在这里插入图片描述
2.找到我们的setContentView()方法
在这里插入图片描述
有三个
在看看它的代码

public void setContentView(int layoutResID) {
    getWindow().setContentView(layoutResID);
    initActionBar();
}

一个是通过获取窗口
一个是显示标题
3.在看看我们的getWindow()
在这里插入图片描述
4.最后在这里找到了它的实例
在这里插入图片描述
5.最终是通过PolicyManager,它主要用于创建Window类、LayoutInflater类和WindowManagerPolicy类,它扮演着简单工厂模式中的工厂类角色,而抽象产品角色由IPolicy接口实现,具体产品角色由Policy类实现。
我看了一下,可能是Android4.4的源码比较老了,我就不拿源码讲了,我讲一下它的大概加载过程

  1. 创建一个DecorView的对象mDecor,该mDecor对象将作为整个应用窗口的根视图。
  2. 依据Feature等style theme创建不同的窗口修饰布局文件,并且通过findViewById获取Activity布局文件该存放的地方(窗口修饰布局文件中id为content的FrameLayout)。
  3. 将Activity的布局文件添加至id为content的FrameLayout内。
  4. 当setContentView设置显示OK以后会回调Activity的onContentChanged方法。Activity的各种View的findViewById()方法等都可以放到该方法中,系统会帮忙回调。

6.我交给大家的可能不是一个非常透彻加载过程,但是我更希望你们能够自己主动去查看源码。大概的加载过程图是这样的
在这里插入图片描述
你可以理解为是从外到内的加载
getWondow() --PhoneWindow,
PhoneWindow–setContentView(),
setContentView()–installDecor(),
installDecor()–generateDecor()和generateLayout(),
最终在generateLayout()会加载布局文件R.layout.screen_title
这时候你就知道为什么xml文件中会有一个标题

<LinearLayout>
	<ViewStub/>//加载主题
	<FrameLayout>
		<TextView/>//加载app标题
	</FrameLayout>
	<Framelayout/>//加载布局
</LinearLayout>

具体的加载过程我引用了大佬的图片
在这里插入图片描述

买了佛冷

可能这个源码讲解有点难度,我个人是喜欢即兴写博客的,纯当我聊聊天,瞎分享,哪里有问题请及时指出,谢谢。那么下一次我可能就不分享事件分发了,有兴趣的可以自己去看看源码,怎么看的方法我以及分享了,但是给你个大概的事件分发关系代码

public boolean dispatchTouchEvent(MotionEvent ev){
	boolean result=false;
	if(onInterceptTouchEvent(ev)){
		result=onTouchEvent(ev);
	}else if{//这个是表示有小徒弟
		result=child.dispatchTouchEvent(ev);
	}
	return result;
}

点击事件分发的规则大概的意思是
敌人来犯,老的看有没有小的徒弟,没有就自己上,有就叫徒弟上,小的如果打不过了,老的来,老的打不过,老祖来…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值