https://rainmonth.github.io/posts/A180420.html
摘要
从启动过程、运行状态、组件使用注意事项、组件的特点等方面来分析Android四大基本组件,并对组件的特性做一些详细说明。
注册方式上,Android的四大组件中除BroadcastReceiver以外,其他三种都必须在AndroidManifest中注册,对于BroadcastReceiver,它既可以在AndroidManifest中注册,也可以在代码中注册。
调用方式上,Activity、Service、BroadcastReceiver需要借助Intent,而ContentProvider则无须借助Intent。
四大组件的运行状态
Activity
Activity是一种展示型组件。有一种运行状态:启动状态。需要掌握的知识点:
- Activity的生命周期
- Activity的启动模式,参考文章Android Activity的启动模式
- Activity的启动过程
Activity的启动过程
具体启动过程如下图:
上面的流程途中,handleLaunchActivity
中调用的performLaunchActivity
主要做以下几件事:
- 从ActivityClientRecord中获取待启动的Activity的组件信息;
- 通过Instrumentation的newActivity方法使用类加载器创建Activity对象;
- 通过LoadedApk的makeApplication方法来尝试创建Application对象;
- 创建ContextImpl对象并通过Activity的attach方法来完成一些重要数据的初始化;
- 调用Instrumentation调用callActivityOnCreate方法来调用Activity的onCreate方法,来启动Activity
至此,Activity的启动流程走完了。
Service
Service是一种计算型组件。有两种运行状态:启动状态和绑定状态。需要掌握的知识点:
- Service的启动过程;
- Service的绑定过程
Service的启动过程(startService)
具体启动过程如下:
handlerCreateService主要做以下工作:
- 通过类加载器,创建Service的实例;
- 创建ContextImpl对象;
- 创建Application对象;
- 通过Service的attach方法将ContextImpl对象和Application对象绑定;
- 调用Service的onCreate方法,并将Service对象放入到列表中
handleServiceArgs方法主要工作:
- 调用Service的onStartCommand方法
Service的绑定过程(bindService)
BroadcastReceiver
BroadcastReceiver是一种消息型组件。
ContentProvider
ContentProvider是一种数据共享型组件。