1.frameworks\base\core\java\android\os中添加一个PowerManager.java和IPowerManager.aidl文件,PowerManager构造函数传入一个实现aidl接口的实现类
2.frameworks\base\services\core\java\com\android\server中添加一个SystemService的实现类PowerManagerService,添加一个内部类实现IPowerManager.aidl,并把具体方法交给PowerManagerService实现,在onStart中用publishBinderService(Context.POWER_SERVICE, new BinderService())把aidl实现类注册
3.在SystemServer中启动PowerManagerService
4.frameworks\base\core\java\android\app\SystemServiceRegistry.java中注册PowerManager.java
registerService(Context.POWER_SERVICE, PowerManager.class,
new CachedServiceFetcher<PowerManager>() {
@Override
public PowerManager createService(ContextImpl ctx) {
IBinder b = ServiceManager.getService(Context.POWER_SERVICE);
IPowerManager service = IPowerManager.Stub.asInterface(b);
if (service == null) {
Log.wtf(TAG, "Failed to get power manager service.");
}
return new PowerManager(ctx.getOuterContext(),
service, ctx.mMainThread.getHandler());
}});
注意:PowerManagerService中具体实现最好加synchronized
注意2:如果启动过程发生crash,会导致不断重启。从安全角度来看,用PowerManagerService(类比)启动一个Service子类会更好。