当前位置:   article > 正文

Android中如何获取系统服务_android getsystemservice

android getsystemservice

普通应用 context.getSystemService

Fast Glance

context.getSystemService 方法用于获取缓存在 ContextImpl 中的系统服务 Manager。缓存的设计,确保每个 ContextImpl 中每种系统服务只有一个 Manager 实例,仅仅在第一次获取时通过 CachedServiceFetcher 创建。

使用示例:

// Activity#attach()
mWindow.setWindowManager(
    (WindowManager)context.getSystemService(Context.WINDOW_SERVICE),
    ...);
  • 1
  • 2
  • 3
  • 4

解析:

// Context
public Object getSystemService(String name) {
   
    return mBase.getSystemService(name);
}

// ContextImpl
public Object getSystemService(String name) {
   
    // SYSTEM_SERVICE_FETCHERS -> ServiceFetcher -> Manager
    return SystemServiceRegistry.getSystemService(this, name);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

SystemServiceRegistry 管理所有可以由 Context#getSystemService 获得的系统服务的 Manager,比如:

WINDOW_SERVICE = "window" // WindowManager.class,实现为 WindowManagerImpl
ACTIVITY_SERVICE = "activity" // ActivityManager.class
  • 1
  • 2

SystemServiceRegistry 的重要字段:

字段名 类型 说明
SYSTEM_SERVICE_NAMES Map<Class<?>, String>
SYSTEM_SERVICE_FETCHERS Map<String, ServiceFetcher<?>>

对于这些常用的系统服务,在 SystemServiceRegistry 的静态代码块中注册了它们的 Manager 的获得方式 ServiceFetcher。

// SystemServiceRegistry.java
static {
   
    ...
    registerService(Context.DISPLAY, DisplayManager.
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/588988
推荐阅读
相关标签
  

闽ICP备14008679号