您的位置:首页 > 移动开发 > Android开发

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

2018-01-02 11:50 393 查看
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子类会更好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: