Android四大组件的工作过程

概述

这里只分析一般过程,不涉及具体的源码分析。

Activity的启动过程

Android四大组件的工作过程

  • 很明显,Activity的启动过程涉及到了IPC,其实四大组件的启动过程都和IPC有关。
  • ActivityManagerService、ApplicationThread都是Binder,ApplicationTread完成了大量的Activity和Service的启动/停止相关的功能。
  • Handler H对消息的处理会调用handleLaunchActivity()->performLaunchActivity()得以最终完成Activity的创建和启动。

Service

Service的启动过程

Android四大组件的工作过程

Service绑定过程

Android四大组件的工作过程

  • ContextImpl是Context的具体实现,通过Activity.attach()和Activity建立关联,是典型的桥接模式。
  • ServiceRecord贯穿整个Service的启动过程。
  • 与Activity的启动过程类似,与AMS发生了IPC,最后回到ApplicationThread中,通过发送消息给H来完成最终的启动。

ContentProvider

ContentProvider的启动过程

Android四大组件的工作过程

ContentProvider的query过程

Android四大组件的工作过程

  • 当ContentProvider所在的进程启动时,ContentProvider会同时启动并发布到AMS中。这时ContentProvider的onCreate要先于Application的onCreate而执行。
  • 一般ContentProvider都是单实例的,这时由android:multipleprocess属性决定的,默认为false
  • 访问ContentProvider需要ContentResolver,其真正实现类是ApplicationContentResolver。当ContentProvider所在进程未启动时,第一次访问它会触发ContentProvider的创建以及进程启动。

BroadcastReceiver

广播注册过程

Android四大组件的工作过程

广播接收/发送过程

Android四大组件的工作过程

  • 静态注册和其他三大组件的注册在应用安装时由系统自动完成,具体来说是由PMS(PackageManagerService)来完成的。
  • 动态注册广播最终会跨进程交给AMS,并把远程Receiver( 实际上传的是IIntentReceiver,是个Binder )对象和远程IntentFilter保存起来,完成注册任务。