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。