IActivityManager ,ActivityManagerNative,ActivityManagerService之间如何进行工作

起点:

研究设置字体大小的实现

mCurConfig.fontScale=Float.parseFloat(objValue.toString());ActivityManagerNative.getDefault().updatePersistentConfiguration(mCurConfig);

开始分析:

IActivityManager定义的接口。

ActivityManagerNativeextendsBinderimplementsIActivityManager

ActivityManagerServiceextendsActivityManagerNative

系统源码在使用的时候往往是:

ActivityManagerNative.getDefault()这样。

源码:

staticpublicIActivityManagergetDefault(){

returngDefault.get();

}

privatestaticfinalSingleton<IActivityManager>gDefault=newSingleton<IActivityManager>(){

protectedIActivityManagercreate(){

//别忘记service是IBinder的子

IBinderb=ServiceManager.getService("activity");

if(false){

Log.v("ActivityManager","defaultservicebinder="+b);

}

IActivityManageram=asInterface(b);

if(false){

Log.v("ActivityManager","defaultservice="+am);

}

returnam;

}

};

返回的是ActivityManagerProxy的实例,

它只是一个代理类,这个代理类实际上代理的是IBinderb=ServiceManager.getService("activity")这个Service。

就是说,实现主要在ActivityManagerService。

-这个Service是什么时候添加进来的呢?

在SystemServer.java的run()中

ActivityManagerService.setSystemProcess()中

ServiceManager.addService("activity",m);

。。。还许多系统服务。

所以ActivityManagerNative.getDefault().updatePersistentConfiguration(mCurConfig)调用的是ActivityManagerService.java的updatePersistentConfiguration。

相关推荐