本文总结自:Android系统中的Application和四大组件一些方法的启动顺序和一些坑
总结:
Application构造方法比attachBaseContext方法优先执行;ContentProvider的onCreate的方法比Application的onCreate的方法先执行(一定,静态注册);Activity、Service的onCreate方法以及BroadcastReceiver的onReceive方法, 是在MainApplication的onCreate方法之后执行的;调用流程为:Application构造方法 —> Application的attachBaseContext —> ContentProvider的onCreate—-> Application的onCreate —> Activity、Service等的onCreate(Activity和Service不分先后);Application的onCreate方法 和 Provider的call方法 不是顺序执行,而是会同时执行。
“坑”
“坑”一: 在Application的attachBaseContext方法中,使用了getApplicationContext方法。 当我发现在attachBaseContext方法中使用getApplicationContext方法返回null时,内心是崩溃。 所以,如果在attachBaseContext方法中要使用context的话,那么使用this吧,别再使用getApplicationContext()方法了。
“坑”二: 这个其实不算很坑,也不会引起崩溃,但需要注意: 在Application的attachBaseContext方法中,去调用自身的ContentProvider, 那么这个ContentProvider会被初始化两次,也就是说这个ContentProvider会被两次 调用到onCreate。如果你在ContentProvider的onCreate中有一些逻辑,那么一定要检 查是否会有影响。