关闭

Activity 如何获取到各种服务service

553人阅读 评论(0) 收藏 举报
分类:

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。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15842次
    • 积分:378
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:10篇
    • 译文:0篇
    • 评论:0条
    文章分类