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源码: