Activity 如何获取到各种服务service

原创 2016年08月29日 11:58:08

1、每个activity都是ContextImpl(从源码创建一个activity的代码中可以看出)

2、每个activity可以getSystemService(String name)其实调用的是ContextImpl中的方法:getSystemService(String name)

3、ContextImpl中又调用了SystemServiceRegistry.getSystemService(ContextImpl ctx,String name)

4、SystemServiceRegistry是一个系统服务注册类,用private static final HashMap<String, ServiceFetcher<?>> SYSTEM_SERVICE_FETCHERS =new HashMap<String, ServiceFetcher<?>>();保存了用户能使用的服务。

5、系统为服务进行了一个享元模式构建,将服务都用静态模块保存起来。并且利用ServiceFetcher进行了统一处理和封装。

6、这里不方便贴代码,故口述讲解主要过程。如下

static {
        registerService(Context.ACCESSIBILITY_SERVICE, AccessibilityManager.class,
                new CachedServiceFetcher<AccessibilityManager>() {
            @Override
            public AccessibilityManager createService(ContextImpl ctx) {
                return AccessibilityManager.getInstance(ctx);
            }});
<span style="white-space:pre">	</span>........

7、这里CachedServiceFetcher实现了ServiceFetcher这个接口。实现了createService方法,此方法返回了我们各种系统服务的管理者XXXManager,此Manager负责与各种服务通信。还实现了getService(),将这里创建的manager 返回出去。

8、静态代码块中的registerService方法,就是将生成的CachedServiceFetcher对象保存在我们前面提到的SYSTEM_SERVICE_FETCHERS 中

9、在3步中,调用SystemServiceRegistry.getSystemService()方法,就是调用SYSTEM_SERVICE_FETCHERS 返回对应name的ServiceFetcher,并调用CachedServiceFetcher中的getService()方法返回对应的manager。


相关文章推荐

Android中获取各种服务是哪里来的

当app第一次加载时就开始注册了那些服务,具体来说就是在应用创建ContextImpl实例的时候调用了SystemServiceRegistry类来进行注册,其注册的服务(就是具体的相关的服务的实例)...

添加android service并通过getSystemService调用

大概实现类似TelephoneManager这样的远程服务,但是yo

Android中getSystemService的过程

1、获得一个service ./Telephony/src/com/android/phone/MobileNetworkSettings.java TelephonyManager tm = ...

Android Context getSystemService分析

当我们希望获取到系统服务时,可以调用Context的getSystemService方法,那么getSystemService又是怎么工作的呢?Activity是一个Context,他调用getSys...
  • xyh269
  • xyh269
  • 2016年10月11日 17:08
  • 3806

Activity调用Service里的方法

Service是不能被实例化的,那么我们如果想调用里边的方法,该怎样进行呢? 首先看一个Serviece类 public class SingService extends Service{ @O...

定制Android系统开发之五——ServiceFetcher

总觉得在上篇博文里面对在ContextImpl里面注册系统服务的过程讲的很乱,这里再写一点,说明一下注册的过程。...
  • wtianok
  • wtianok
  • 2015年10月20日 10:30
  • 957

Android Service与Activity之间通信的几种方式

在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activ...

Android中getSystemService流程

在平时的android开发中,我们经常会通过Context来获取系统服务,比如ActivityManagerService,AccountManagerService等系统服务,今天我们就来看下get...

Android高手之路之获取正在运行的service,以及判断某个service是否正在运行

注:本文改自http://blog.csdn.net/android_tutor/article/details/5824581 其实主要是用了activityManager的getRunningS...
  • howlaa
  • howlaa
  • 2015年02月03日 17:18
  • 3186

Android学习之Activity与Service进行通信的三种方式

Activity与Service进行通信的三种方式 第一种 简单通信 直接通过Intent进行传值,我们在启动一个Service的时候通过Intent的对象向Service进行传值,这种方式传...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Activity 如何获取到各种服务service
举报原因:
原因补充:

(最多只允许输入30个字)