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.javaprivate 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.javaMyXXXActivityTaskManagerInternal myXXXActivityTaskManagerInternal= LocalServices.getService(MyXXXActivityTaskManagerInternal.class);return myXXXActivityTaskManagerInternal.getFocusedApp().

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

  1. eureka自我保护时间_spring cloud中微服务之间的调用以及eureka的自我保护机制详解...

    上篇讲了spring cloud注册中心及客户端的注册,所以这篇主要讲一下服务和服务之间是怎样调用的 基于上一篇的搭建我又自己搭建了一个客户端微服务: 所以现在有两个微服务,我们所实现的就是微服务1和 ...

  2. Android 在线启动、停止 init.rc 中的服务

    在 aosp 源码中,可以在 init.xxx.rc 中添加一些服务(不是四大组件的Service),比如 service my_service /vendor/bin/sh /vendor/bin/ ...

  3. 解决springcloud 中各服务之间调用外部依赖的clint api时,在调试时不方便的问题

    解决springcloud 中,各个服务中调用外部依赖的api,在调试时不方便的问题 屏蔽外部依赖 那如何解决问题呢?既可以在本地调试也不用启动其他服务. 大致的流程分 具体实践 调用接口 替换原有的 ...

  4. Android系统在新进程中启动自定义服务过程(startService)的原理分析 (下)

    Step 10. ActivityManagerService.attachApplicationLocked 这个函数定义在frameworks/base/services/java/com/and ...

  5. Android 10.0 系统启动之SystemServer进程-[Android取经之路]

    摘要:上一节讲解了Zygote进程的整个启动流程.Zygote是所有应用的鼻祖.SystemServer和其他所有Dalivik虚拟机进程都是由Zygote fork而来.Zygote fork的第一 ...

  6. Android系统启动(二) — Zygote进程启动过程

    1 概述 在 Android 系统中,DVM(Dalvik 虚拟机)和 ART,系统服务进程 system_server 以及应用程序进程都是由 Zygote 进程来创建的(而 Native 程序,也 ...

  7. Android9.0(Pie) system_server进程学习

    0.引言 在上篇文章<Zygote--Android系统中java世界的受精卵>中,我们提到了zygote的一个关键动作,那就是fork出system_server进程.这篇文章我们就来详 ...

  8. Activity启动流程(六)注册目标Activity进程到system_server进程以及创建目标Activity进程Application

    注册Activity应用进程到system_server以及创建Activity应用进程Application Android四大组件源码实现详解系列博客目录: Android应用进程创建流程大揭秘 ...

  9. android异步线程未执行,关于多线程:当服务在后台运行时,Android异步任务无法正常运行(doInBackground未执行)...

    我注意到有时Async任务无法正常运行,实际上它的doInBackground()方法没有被调用,这种情况主要发生在该活动在后台运行任何服务时. 例如,当音乐在带有服务的后台运行时,Async任务不会 ...

  10. Android应用程序窗口(Activity)与WindowManagerService服务的连接过程分析

    在前两文中,我们分析了Activity组件的窗口对象和视图对象的创建过程.Activity组件在其窗口对象和视图对象创建完成之后,就会请求与WindowManagerService建立一个连接,即请求 ...

最新文章

  1. hdu 1811 Rank of Tetris (并查集+拓扑排序)
  2. Qt读写注册表和ini文件
  3. android简单歌词,Yuan-LrcView
  4. Windows 典藏篇-vc++运行库安装,Microsoft Visual C++ Build Tools官方工具
  5. Android版本更新踩坑,Android Studio 3.0升级后踩到的坑
  6. boost::fusion::replace_if用法的测试程序
  7. flower.php,flower.php
  8. 2022年中国开源软件产业研究报告
  9. 第13课 智商问题 《小学生C++趣味编程》
  10. 数据镜像备份工具rsync + inotify
  11. 如何weak link一个framework (高版本兼容低版本)
  12. python inspect —— 查看类的继承体系
  13. 使用SQL Server Management Studio 创建数据库备份作业
  14. cisco2811 一对一IP地址映射
  15. vsCode 快速生成vue 模板
  16. 图片文件怎么快速压缩?
  17. ubuntu下阅读源码工具
  18. Windows11、win11、Windows10、win10系统安装
  19. (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest
  20. 最全Mac系统快捷键一览 学会了一秒变大神!

热门文章

  1. 电脑重装系统后无法上网怎么办
  2. 吉大网络教育护理学专升本病例分析
  3. 如何清理多余的Windows桌面右键菜单
  4. iOS-OC-提交审核:Missing Push Notification Entitlement
  5. 本地SecureCRT连接VMware中XUbuntu
  6. Python获取高德POI(关键词搜索法)
  7. RTC领域首个AI算法大赛 AI in RTC 2019 创新挑战圆满落幕
  8. EfficientDet实验笔记
  9. 使用Nginx Upstream 部署 OpenERP
  10. Centos7.5系统部署禅道协调管理系统以及配置优化