其实View并不是直接跟Activity关联起来的

ctivity工作过程: 
启动: 
从startActivity开始,它会调用到Instrumentation,然后Instrumentation通过Binder向AMS(ActivityManagerService)发请求,通过PIC启动Activity。而这个AIDL操作的方法定义在ApplicationThread中(里面包括了Activity所有的生命周期方法的调用)。然后通过Handle回到主线程启动activity。 
因为中间流程太多,详细写出来容易造成“见其树木,而不见其森林”的局面。

启动Activity所执行的操作: 
1、从ActivityClientRecord中获取待启动的Activity组件信息 
2、通过Instrumentation的newActivity方法使用类加载器创建Activity对象 
3、通过LoadedApk的mackApplication方法来尝试创建Application对象(如果Application已经创建,则不会重复创建) 
4、创建ContextImpl对象,并通过Activity的attach方法来完成一些重要数据的初始化(包括让Activity跟Window关联) 
5、调用Activity的onCreate方法

美丽的窗花View

View如何跟Activityhttp://u.cncn.com/space-323-do-blog-id-377295.htmlumentation的newActivity
http://u.cncn.com/space-323-do-blog-id-377142.htmlumentation的newActivity
http://u.cncn.com/space-mtag-tagid-782.html
http://u.cncn.com/space-mtag-tagid-783.html关联起来的? 
其实View并不是直接跟Activity关联起来的,而是通过Window这个中间人。如前面所说,View只是窗花,Window才是直接关联到Activity上的。那么: 
View如何跟Window关联起来呢?

下面先了解一下Window,就可以理解这个问题了

灵活的窗户Window

Window如何跟Activity关联? 
每一个Activity都包含了唯一一个PhoneWindow,这个就是Activity根Window(之所以是说根Window是因为在它上面可以增加更多其他的Window,例如:弹出框(dialog))

那么,PhoneWindow如何跟Activity关联起来的呢? 
来个最简单的,setContentView其实就让View与Window关联,Window跟Activity关联起来了。

那setContentView不是View跟Activity关联吗? 
真相见Activity源码: 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章