getSystemService是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。以下介绍系统相应的服务。

传入的Name 返回的对象 说明
WINDOW_SERVICE  WindowManager 管理打开的窗口程序
LAYOUT_INFLATER_SERVICE LayoutInflater  取得xml里定义的view
ACTIVITY_SERVICE ActivityManager  管理应用程序的系统状态

POWER_SERVICE

PowerManger 电源的服务
ALARM_SERVICE AlarmManager 闹钟的服务

NOTIFICATION_SERVICE

NotificationManager 状态栏的服务
KEYGUARD_SERVICE  KeyguardManager  键盘锁的服务
LOCATION_SERVICE  LocationManager  位置的服务,如GPS
SEARCH_SERVICE SearchManager  搜索的服务
VEBRATOR_SERVICE  Vebrator 手机震动的服务
CONNECTIVITY_SERVICE Connectivity 网络连接的服务
WIFI_SERVICE WifiManager Wi-Fi服务
 TELEPHONY_SERVICE TeleponyManager 电话服务

getSystemService()方法是如何实现的?

在研究Android Application  Framwork层的源代码遇到一个问题

就是Activity里面的getSystemService()方法是怎么实现的?
我研究了半天没看出怎么实现的
Activity继承自ContextThemeWrapper(这里面只有部分实现),ContextThemeWrapper继承自ContextWrapper,ContextWrapper继承自Context
Context是个抽象类,getSystemService也是抽象方法
没找到在哪里实现的Context的抽象方法:getSystemService啊

我觉得会不会是系统自动调用native实现这个抽象类Context?
但是请教高手们具体是怎么实现的?

你好  在 framework 层文件 ContextImpl.java 文件里面
根据service 的类型 调用相应的 manager层
public Object getSystemService(String name) {
        if (WINDOW_SERVICE.equals(name)) {
            return WindowManagerImpl.getDefault();
        } else if (LAYOUT_INFLATER_SERVICE.equals(name)) {
            synchronized (mSync) {
                LayoutInflater inflater = mLayoutInflater;
                if (inflater != null) {
                    return inflater;
                }
                mLayoutInflater = inflater =
                    PolicyManager.makeNewLayoutInflater(getOuterContext());
                return inflater;
            }
        } else if (ACTIVITY_SERVICE.equals(name)) {
            return getActivityManager();
        } else if (INPUT_METHOD_SERVICE.equals(name)) {
            return InputMethodManager.getInstance(this);
        } else if (ALARM_SERVICE.equals(name)) {
            return getAlarmManager();
        } else if (ACCOUNT_SERVICE.equals(name)) {
            return getAccountManager();
        } else if (POWER_SERVICE.equals(name)) {
            return getPowerManager();
}

getSystemService相关推荐

  1. 系统服务-----Activity服务的获取getSystemService

    android的后台存在非常多service,它们在系统启动的时候被SystemServer开启.来为系统的正常执行做支撑.Activity中要调用这些service就得使用getSystemServ ...

  2. Android之getSystemService

    getSystemService是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象.以下介绍系统相应的服务. 传入 ...

  3. getSystemService() in Android

    在之前研究了那么久的bindService()这个API,一直没搞清楚一个问题: 为什么我看到的基本上都是和AMS相关的代码,而之前所学到说如果application要和service打交道都是需要通 ...

  4. Android Context getSystemService分析

    我们知道一个应用的Context个数是Activity个数+Service个数+1 当我们希望获取到系统服务时,可以调用Context的getSystemService方法,如获取到ActivityM ...

  5. android中getSystemService详解

    原文地址:android中getSystemService详解作者:邹斌 http://blog.sina.com.cn/s/blog_71d1e4fc0100o8qr.html http://blo ...

  6. 项目销毁主页Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService异常

    项目需求,项目退出登录的时候,跳转登录页面,重新登录,会重新进入首页.很简单的需求,只需在退出的时候将存储的用户信息销毁,把之前活跃的activity销毁,重新跳转进入登录界面即可.但是在真正执行退出 ...

  7. getSystemService();的使用

    getSystemService是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象.下面介绍系统相应的服务: 传入 ...

  8. java.lang.Object android.content.Context.getSystemService(java.lang.String)‘ on a null object

    出现原因:在fragment中动态添加一个layout 例如: View notDataView = getLayoutInflater().inflate(R.layout.empty_view, ...

  9. Android 判断某个服务是否正在运行

    判断某个服务是否正在运行的工具类 public class ServiceRunManager {public static boolean isServiceRunning(Context cont ...

最新文章

  1. 推荐的 PHP 读物列表
  2. 稳压二级管原理之详解
  3. 如何解读「量子计算应对大数据挑战:中国科大首次实现量子机器学习算法」?——是KNN算法吗?...
  4. 最小完美哈希函数简介
  5. MFC 缩放和显示IplImage
  6. SAP 电商云 Spartacus UI 产品明细页面路由确定后,加载的是 page template
  7. 表示我想你的代码java_如何编写可怕的Java代码?
  8. r怎么对两组数据统计检验_数据科学中最常用的统计检验是什么
  9. Docker 开发环境的滑坡
  10. 自动驾驶:梦想已经照进现实?
  11. Hadoop(一)基础概念
  12. 手动编辑文件解决冲突_4.2.1 git am patch手动解决冲突的办法
  13. 9.Nginx 日志管理
  14. Centos7中完美搭建ftp服务器
  15. ADS(Advanced Design system)仿真测试元器件输入阻抗
  16. ckplayer php,ckplayer播放器
  17. html canvas缩放抗锯齿,Html5 canvas drawImage:如何应用抗锯齿
  18. PWM的占空比、分辨率
  19. 搭建-ico图标制作
  20. Zabbix 监控ESXi服务器【非虚拟机】CPU、内存、硬盘、网络带宽

热门文章

  1. c语言isfinite_csqrtf - [ C语言中文开发手册 ] - 在线原生手册 - php中文网
  2. qt 工作流_助力提升企业生产力-工作流管理
  3. java php serialize_PHP serialize 和 JSON 解析与区别
  4. python中字典和集合的使用
  5. BZOJ3238:[AHOI2013]差异——题解
  6. ICE学习之C# Java之间通讯
  7. JSP笔记——7.自定义标签
  8. u3d外部资源加载加密
  9. Java中接口定义成员变量
  10. 统计sql server数据库中所有表的记录数