Android LocalServices解耦妙用: system_server进程中各个服务之间的连通器LocalServices

Android LocalServices解耦妙用: system_server进程中各个服务之间的连通器LocalServices

LocalServices是system_server进程中各个服务提供的本地服务。
本质上分析:LocalServices就是一个公开缓存池,
system_server进程中每个服务都可以往LocalServices放对象。
例如:ActivityTaskManagerService服务,通过如下方法:
LocalServices.addService(ActivityTaskManagerInternal.class, mInternal);
把mInternal对象放进LocalServices这个公开缓存池,其他服务就可以通过如下方法:
LocalServices.getService(ActivityTaskManagerInternal.class);
得到该对象,进而通过该对象访问和使用ActivityTaskManagerService服务。

LocalServices是公开缓存池目的是:解耦。
即:让system_server进程中各个服务弱耦合。

因此发现LocalServices有如此的妙用:
可以通过LocalServices,放扩展该服务接口的对象。

注意:不要随意放LocalServices放太多的对象,因为对象太多检索也会耗时。
建议在需要增加扩展接口的服务中,只需要放一个扩展服务接口的对象即可。

例子Demo:
例如:ActivityTaskManagerService服务中没有提供获取焦点App的接口,
于是,就可以通过LocalServices放扩展该服务接口的对象MyXXXActivityTaskManagerInternal。
这样system_server进程中的其他地方就可以使用MyXXXActivityTaskManagerInternal提供的扩展接口。


ActivityTaskManagerService.java
    private void start() {
        LocalServices.addService(ActivityTaskManagerInternal.class, mInternal);


        LocalServices.addService(MyXXXActivityTaskManagerInternal.class, new MyXXXActivityTaskManagerInternal());

    }

    /**
     * @hide
     */
    public final class MyXXXActivityTaskManagerInternal {

        public ActivityRecord getFocusedApp() {
            DisplayContent topFocusedDisplay = mRootWindowContainer.getTopFocusedDisplayContent();
            ActivityRecord focusedApp = topFocusedDisplay.mFocusedApp;
            return focusedApp;
        }
    }

XXXDemo.java
    MyXXXActivityTaskManagerInternal myXXXActivityTaskManagerInternal
            = LocalServices.getService(MyXXXActivityTaskManagerInternal.class);
    return myXXXActivityTaskManagerInternal.getFocusedApp().

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值