四大组件与AMS交互初步理解

目录

 

 

四大组件与AMS交互初步理解

一、Activity

二、Service

三、BroadcastReceiver

四、ContentProvider


 

四大组件与AMS交互初步理解

一、Activity

ActivityThread是应用的主进程,Activty想要与ams通信(如运行startActivity()),都是通过Binder机制,ActivityManagerNative.getDefault()去调用AMS的相关方法,而AMS通过ApplicationThread(也是Binder,是ActivityThread的内部类)回调,然后通过Handler转发运行到ActivityThread的主线程;

然后在AMS中维护有ActivityRecord、TaskRecord、ActivityStack对Activity进行管理;

 

二、Service

与Activity类似

在AMS中维护有ServiceRecord

 

三、BroadcastReceiver

与Activity类似,但是传递过去了一个InnerReceiver(Binder)和filter过去;

在AMS中用Map去保存InnerReceiver(Binder)和filter,最后回调是通过ApplicationThread去调用InnerReceiver,通过mH回调到ActivityThread中来;

 

四、ContentProvider

A应用想访问B应用的ContentProvider,首先会去通过AMS去获取ProviderMap,看其中是否有该IContentProvider对象(Binder对象),如果B应用未启动,则AMS中的ProviderMap没有该IContentProvider对象,那么去启动进程B;AMS启动进程B,进程B开启ActivityThread主线程,AMS会通过ApplicationThread跨进程调用完成B应用的Application和ContentProvider的启动,然后ContentProvider会通过IContentProvider发布到AMS的ProviderMap中(IContentProvider的具体实现是ContentProviderNative和ContentProvider.Transport,其中ContentProvider.Transport继承ContentProviderNative,真实实现者其实是ContentProvider.Transport),而A应用则可以通过ProviderMap中获取到IContentProvider对象,访问IContentProvider对象的query方法会访问到B应用的ContentProvider.Transport的query方法,ContentProvider.Transport的query方法会去调用ContentProvider的query方法。

你可能感兴趣的:(Framework)