正文
为了测试 四大组件 和 Application 的各种方法( attachBaseContext、onCreate、call 等)被系统调用的顺序,我们创建一个简单的应用,只包含这5个组件,不考虑一个应用多进程的情况,代码分别为:
MainApplication.java
MainActivity.java
MainService.java
MainReceiver.java
MainProvider.java
在以下几个场景测试时,均已冷启动的方式启动应用。
冷启动,指的是在系统没有创建apk这个进程时启动apk。
注意在测试的手机上,不要让测试的应用被禁止关联启动或自启动:
场景一
,点击桌面的图标启动应用,日志如下:
场景二
,通过另外一个应用以启动Service的形式启动应用,其中启动 MainService 的代码如下:
日志如下:
场景三
,应用通过接受开机广播启动的方式启动,日志如下:
场景四
,其他应用调用 ContentProvider 的 call 方法启动,其中,调用 MainProvider 的 call 代码如下:
日志如下:
结论:
从上面四个场景可以看出:
1.
Application 的 attachBaseContext 方法是优先执行的;
2.
ContentProvider 的 onCreate 的方法比 Application 的 onCreate 的方法先执行;
3.
Activity、Service的 onCreate 方法以及 BroadcastReceiver 的 onReceive 方法,是在 MainApplication 的 onCreate 方法之后执行的;
4.
调用流程为: Application 的 attachBaseContext ---> ContentProvider 的 onCreate ----> Application 的 onCreate ---> Activity、Service 等的 onCreate(Activity 和 Service 不分先后);