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.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相关推荐
- eureka自我保护时间_spring cloud中微服务之间的调用以及eureka的自我保护机制详解...
上篇讲了spring cloud注册中心及客户端的注册,所以这篇主要讲一下服务和服务之间是怎样调用的 基于上一篇的搭建我又自己搭建了一个客户端微服务: 所以现在有两个微服务,我们所实现的就是微服务1和 ...
- Android 在线启动、停止 init.rc 中的服务
在 aosp 源码中,可以在 init.xxx.rc 中添加一些服务(不是四大组件的Service),比如 service my_service /vendor/bin/sh /vendor/bin/ ...
- 解决springcloud 中各服务之间调用外部依赖的clint api时,在调试时不方便的问题
解决springcloud 中,各个服务中调用外部依赖的api,在调试时不方便的问题 屏蔽外部依赖 那如何解决问题呢?既可以在本地调试也不用启动其他服务. 大致的流程分 具体实践 调用接口 替换原有的 ...
- Android系统在新进程中启动自定义服务过程(startService)的原理分析 (下)
Step 10. ActivityManagerService.attachApplicationLocked 这个函数定义在frameworks/base/services/java/com/and ...
- Android 10.0 系统启动之SystemServer进程-[Android取经之路]
摘要:上一节讲解了Zygote进程的整个启动流程.Zygote是所有应用的鼻祖.SystemServer和其他所有Dalivik虚拟机进程都是由Zygote fork而来.Zygote fork的第一 ...
- Android系统启动(二) — Zygote进程启动过程
1 概述 在 Android 系统中,DVM(Dalvik 虚拟机)和 ART,系统服务进程 system_server 以及应用程序进程都是由 Zygote 进程来创建的(而 Native 程序,也 ...
- Android9.0(Pie) system_server进程学习
0.引言 在上篇文章<Zygote--Android系统中java世界的受精卵>中,我们提到了zygote的一个关键动作,那就是fork出system_server进程.这篇文章我们就来详 ...
- Activity启动流程(六)注册目标Activity进程到system_server进程以及创建目标Activity进程Application
注册Activity应用进程到system_server以及创建Activity应用进程Application Android四大组件源码实现详解系列博客目录: Android应用进程创建流程大揭秘 ...
- android异步线程未执行,关于多线程:当服务在后台运行时,Android异步任务无法正常运行(doInBackground未执行)...
我注意到有时Async任务无法正常运行,实际上它的doInBackground()方法没有被调用,这种情况主要发生在该活动在后台运行任何服务时. 例如,当音乐在带有服务的后台运行时,Async任务不会 ...
- Android应用程序窗口(Activity)与WindowManagerService服务的连接过程分析
在前两文中,我们分析了Activity组件的窗口对象和视图对象的创建过程.Activity组件在其窗口对象和视图对象创建完成之后,就会请求与WindowManagerService建立一个连接,即请求 ...
最新文章
- hdu 1811 Rank of Tetris (并查集+拓扑排序)
- Qt读写注册表和ini文件
- android简单歌词,Yuan-LrcView
- Windows 典藏篇-vc++运行库安装,Microsoft Visual C++ Build Tools官方工具
- Android版本更新踩坑,Android Studio 3.0升级后踩到的坑
- boost::fusion::replace_if用法的测试程序
- flower.php,flower.php
- 2022年中国开源软件产业研究报告
- 第13课 智商问题 《小学生C++趣味编程》
- 数据镜像备份工具rsync + inotify
- 如何weak link一个framework (高版本兼容低版本)
- python inspect —— 查看类的继承体系
- 使用SQL Server Management Studio 创建数据库备份作业
- cisco2811 一对一IP地址映射
- vsCode 快速生成vue 模板
- 图片文件怎么快速压缩?
- ubuntu下阅读源码工具
- Windows11、win11、Windows10、win10系统安装
- (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest
- 最全Mac系统快捷键一览 学会了一秒变大神!