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。


创建一个系统的Service,能通过ServiceManager.getService取得service

Java层service顾名思义即为从 Java层提供的service,它与 C++层的服务不同之处在于其service进程的运行由系统( ServiceManager)统一维护。在文件 framew...
  • jingwen3699
  • jingwen3699
  • 2016年11月29日 20:59
  • 3071

Android系统Service及其获取的方法 一览表

通过方法getSystemService,可以获得各种系统服务:      * @see #WINDOW_SERVICE      * @see android.view.WindowMana...
  • liao277218962
  • liao277218962
  • 2015年12月03日 14:38
  • 1911

Android service获取调用者的真实package name

我有一个service,别的App可以调用它。 我的service想获取调用者的packageName,该如何做呢? 实践表明:必须调用者事先写进Intent, 才能才能通过intent.getC...
  • chuyouyinghe
  • chuyouyinghe
  • 2016年08月24日 11:17
  • 1527

Activity如何获取Service中的参数

一些进程需要在Service中运行,但是如果zai
  • mutoujian126
  • mutoujian126
  • 2014年11月24日 14:39
  • 1540

service启动activity同时需要得到activity里的某个对象实现方法

本人android小菜鸟一只,最近因为某一个顽强的大boss bug困扰鄙人2天之久。 其根本问题就是startactivity的启动过程是放在一个ui线程里面执行的。 所以,当我在service...
  • WalterZhoukick
  • WalterZhoukick
  • 2016年03月02日 12:05
  • 946

android activity和service的交互介绍

android开发中,实现activity和service的相互交互
  • hhhccckkk
  • hhhccckkk
  • 2015年03月03日 14:54
  • 19147

ActivityManager获得正在运行的activity与service

ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVI...
  • dj0379
  • dj0379
  • 2016年06月04日 15:15
  • 1275

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

在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activ...
  • xiaanming
  • xiaanming
  • 2013年08月05日 00:11
  • 187968

Android-获取服务getContext().getSystemService()

本文大部分内容转自一篇新浪博客 android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如MountService监听是否有SD卡安装及移...
  • zhumingquanqq
  • zhumingquanqq
  • 2016年05月05日 08:40
  • 1255

Context与Activity/Service/Application

在android中我们经常遇到这样的情况,在创建一个对象的时候,往往需要传递一个this参数,比如:语句 MyView mView = new MyView(this),要求传递一个this参数,这个...
  • gaojinshan
  • gaojinshan
  • 2015年12月16日 16:41
  • 1258
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Activity 如何获取到各种服务service
举报原因:
原因补充:

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