Android 四大组件——Android开发艺术探索读书笔记

https://rainmonth.github.io/posts/A180420.html

摘要

从启动过程、运行状态、组件使用注意事项、组件的特点等方面来分析Android四大基本组件,并对组件的特性做一些详细说明。

注册方式上,Android的四大组件中除BroadcastReceiver以外,其他三种都必须在AndroidManifest中注册,对于BroadcastReceiver,它既可以在AndroidManifest中注册,也可以在代码中注册。

调用方式上,Activity、Service、BroadcastReceiver需要借助Intent,而ContentProvider则无须借助Intent。

四大组件的运行状态

Activity

Activity是一种展示型组件。有一种运行状态:启动状态。需要掌握的知识点:

Activity的启动过程

具体启动过程如下图:

Activity启动流程

上面的流程途中,handleLaunchActivity中调用的performLaunchActivity主要做以下几件事:

  1. 从ActivityClientRecord中获取待启动的Activity的组件信息;
  2. 通过Instrumentation的newActivity方法使用类加载器创建Activity对象;
  3. 通过LoadedApk的makeApplication方法来尝试创建Application对象;
  4. 创建ContextImpl对象并通过Activity的attach方法来完成一些重要数据的初始化;
  5. 调用Instrumentation调用callActivityOnCreate方法来调用Activity的onCreate方法,来启动Activity

至此,Activity的启动流程走完了。

Service

Service是一种计算型组件。有两种运行状态:启动状态和绑定状态。需要掌握的知识点:

  • Service的启动过程;
  • Service的绑定过程

Service的启动过程(startService)

具体启动过程如下:

startService启动过程图

handlerCreateService主要做以下工作:

  • 通过类加载器,创建Service的实例;
  • 创建ContextImpl对象;
  • 创建Application对象;
  • 通过Service的attach方法将ContextImpl对象和Application对象绑定;
  • 调用Service的onCreate方法,并将Service对象放入到列表中

handleServiceArgs方法主要工作:

  • 调用Service的onStartCommand方法

Service的绑定过程(bindService)

BroadcastReceiver

BroadcastReceiver是一种消息型组件。

ContentProvider

ContentProvider是一种数据共享型组件。