1.了解Application的作用
2.熟悉Application的类继承关系以及生命周期
3.深入理解Application的初始化原理
Application的生命周期和应用进程的生命周期一样长。一般用于保存应用进程内的全局变量,做一些初始化操作,提供应用上下文。
Application的所有context的调用都是通过mBase处理的,这里用到了java的静态代理。
ActivityThread的attach函数向AMS发起binder调用传入应用的binder句柄,AMS收到请求后会调用attachApplicationLocked函数。
AMS向应用发起ipc调用,把参数封装到AppBindData里发消息让应用端在主线程里处理创建Application
为Application创建context,然后在把context传入到创建的Application里
创建的application其实只是个空壳,它的上下文是attach传入的,attachBaseContext函数就是给mBase赋值。
再来看一下流程
为什么不要在Application的生命周期回调里进而执行耗时操作?
因为AMS向应用发起的调用是oneway的,而bindApplication函数是在应用主线程里执行的,所以耗时操作会阻塞线程,也会影响bindApplication之后的组件启动。
网友评论