您的位置:首页 > 移动开发 > Android开发

Android中getSystemService的作用

2015-04-05 16:41 429 查看
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_SERVICELocationManager 位置的服务,如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();

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