9.1 四大组件的运行状态
Android四大组件中除了BroadcastReceiver以外,其他三种组件都必须在Manifest中注册,广播可以静态注册或者动态注册;
Activity:是一种展示型组件,用于向用户直接地显示一个界面,并且可以接受用户的输入信息从而进行交互,Activity由intent触发,其中Intent可以分为显示Intent,和隐式Intent,同一个Activity在不同的启动模式下会有不同的效果
Service:是一种计算型组件,用于在后台执行一系列计算任务,Service有启动状态和绑定状态,当Service组件处于启动状态,Service可以做一些后台计算,并且不需要和外界有直接的交互,当Service处于绑定状态,这个时候Service内部同样可以进行后台计算,但是处于这种状态可以很方便的外界进行通信。
BroadcastReceiver:是一种消息型组件,用于在不同的组件乃至不同的应用之间传递消息,广播的注册方式有两种:静态注册和动态注册。静态注册是指在Mannifest中注册,这种方式注册的广播会在应用安装时被系统解析,此种形式的广播不需要应用启动就能收到广播。动态广播需要需要通过context.registerReceiver来注册,并且在不需要的时候需要context.unregisterReceiver来解注册,此种形态的广播需要应用启动才能注册并且接收广播。
ContentProvider:是一种消息共享型组件,用于向其他组件乃至其他应用共享数据,它的内部需要通过增删改查来实现。
Activity.startActivity->Activity.startActivityForResult->Instrumentation.execStartActivity
->ActivityManagerNative.getDefalut.startActivity->IPC->服务端AMS.startActivity->进入ActivityStackSupervisor和ActivityStack的方法调用链->ActivityStackSupervisor.reStartActivityLocked
->ApplicationThreadProxy.scheduleLaunchActivity->IPC->ApplicationThread.scheduleLaunchActivity
->Handler->ActivityThread.handleLaunchActivity->ActivityThread.performLaunchActivity;
客户端:ActivityManagerProxy =====>Binder驱动=====> ActivityManagerService:服务器
客户端:ApplicationThread <=====Binder驱动<===== ApplicationThreadProxy:服务器
abstract ActivityManagerNative extends Binder implements IActivityManager:相当于Stub
ActivityManagerProxy implements IActivityManager:Proxy代理类ActivityManagerService extends ActivityManagerNative:AMS,Stub的实现类
IActivityManager:AIDL接口
abstract ApplicationThreadNative extends Binder implements IApplicationThread:相当于Stub ApplicationThreadProxy implements IApplicationThread :Proxy代理类,服务端,ActivityThreadNative内部类
ApplicationThread extends ApplicationThreadNative: Stub的实现类,客户端,Activity内部类
IApplicationThread:AIDL接口