博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android之getSystemService
阅读量:5753 次
发布时间:2019-06-18

本文共 1789 字,大约阅读时间需要 5 分钟。

 

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 电话服务

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 





在研究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();
}

转载地址:http://vwckx.baihongyu.com/

你可能感兴趣的文章
清华的游泳馆终于重新开馆了
查看>>
oracle sql优化总结
查看>>
最长公共子序列LCS
查看>>
PPP中的pap和chap认证
查看>>
Python学习记录-2016-11-30
查看>>
day14_dom操作
查看>>
linux 常用目录操作命令有哪些
查看>>
Python 字符串
查看>>
device-mapper 块级重删(dm dedup) <3>代码结构(3)
查看>>
Lnmp 配置多 PHP 开发环境
查看>>
Centos7安装Docker镜像仓库Harbor1.5.3之https
查看>>
负载均衡群集之一LVS-DR
查看>>
大学生为什么要参加软考
查看>>
linux学习第一月测验
查看>>
今日新闻-2019智能家居@智能硬件博览会
查看>>
今日头条架构演进之路——高压下的架构演进专题
查看>>
零基础学习嵌入式 嵌入式底层开发和上层应用
查看>>
shell编程进阶篇
查看>>
Pixelmator Pro mac专为macOS设计,与macOS High Sierra无缝集成
查看>>
system表空间空间解决(ORA-00604 ORA-01653 ORA-02002)
查看>>