如何在Android系统中添加系统服务(以PowerManager为例)

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子类会更好。

猜你喜欢

转载自blog.csdn.net/ccc905341846/article/details/78950455