IActivityManager ,ActivityManagerNative,ActivityManagerService之间如何进行工作
起点:
研究设置字体大小的实现
mCurConfig.fontScale = Float.parseFloat(objValue.toString());ActivityManagerNative.getDefault().updatePersistentConfiguration(mCurConfig);
开始分析:
IActivityManager 定义的接口。
ActivityManagerNative extends Binder implements IActivityManager
ActivityManagerService extends ActivityManagerNative
系统源码在使用的时候往往是:
ActivityManagerNative.getDefault()这样。
源码:
static public IActivityManager getDefault() {
return gDefault.get();
}
private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {
protected IActivityManager create() {
//别忘记service是IBinder的子
IBinder b = ServiceManager.getService("activity");
if (false) {
Log.v("ActivityManager", "default service binder = " + b);
}
IActivityManager am = asInterface(b);
if (false) {
Log.v("ActivityManager", "default service = " + am);
}
return am;
}
};
返回的是ActivityManagerProxy的实例,
它只是一个代理类,这个代理类实际上代理的是IBinder b = ServiceManager.getService("activity")这个Service。
就是说,实现主要在ActivityManagerService。
- 这个Service是什么时候添加进来的呢?
在SystemServer.java的run()中
ActivityManagerService.setSystemProcess()中
ServiceManager.addService("activity", m);
。。。还许多系统服务。
所以ActivityManagerNative.getDefault().updatePersistentConfiguration(mCurConfig)调用的是ActivityManagerService.java的updatePersistentConfiguration。