第一种方法:
在 IActivityManager.aidl 中添加接口,ActivityManagerService 中实现
这样扩展简单,但是在系统版本升级时会带来同步麻烦
第二种方法:
1.创建新服务 ExtActivityManagerService 继承 ActivityManagerService
重写onTransact方法
public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
IActivityManager.aidl 生成的java方法编号都是从0开始递增,
ExtActivityManagerService中新增的接口可以直接从10000开始编号,如下:
public boolean onTransact(int code, Parcel data, Parcel reply, int flags){
switch(code){
case 10000:
//接口实现
break;
default:
return super.onTransact(code, data, reply, flags);
break;
}
}
2. 修改ActivityManagerService$Lifecycle
将 mService = new ActivityManagerService(context);改为
mService = new ExtActivityManagerService(context);
这样就替换了原来的ActivityManagerService
3. 添加客户端调用接口,可创建ExtActivityManager
PS:如果接口参数很多,可先将接口加在IActivityManager.aidl,重编framework,然后查找
out/soong/.intermediates/frameworks/base/framework/android_common/gen/aidl/frameworks/base/core/java/android/app/IActivityManager.java
参考里面的接口实现,这样就省事。