您的位置:首页 > 其它

getSystemService

2017-09-14 16:38 127 查看
getSystemService是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。以下介绍系统相应的服务。
 
 
传入的Name返回的对象说明
WINDOW_SERVICE WindowManager管理打开的窗口程序
LAYOUT_INFLATER_SERVICELayoutInflater 取得xml里定义的view
ACTIVITY_SERVICEActivityManager 管理应用程序的系统状态
POWER_SERVICE
PowerManger电源的服务
ALARM_SERVICEAlarmManager闹钟的服务
NOTIFICATION_SERVICE 
NotificationManager状态栏的服务
KEYGUARD_SERVICE KeyguardManager 键盘锁的服务
LOCATION_SERVICE LocationManager 位置的服务,如GPS
SEARCH_SERVICESearchManager 搜索的服务
VEBRATOR_SERVICE Vebrator手机震动的服务
CONNECTIVITY_SERVICEConnectivity网络连接的服务
WIFI_SERVICEWifiManagerWi-Fi服务
 TELEPHONY_SERVICETeleponyManager电话服务
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: