getSystemService
来源:互联网 发布:淘宝极速退款 编辑:程序博客网 时间:2024/05/21 21:34
getSystemService是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。以下介绍系统相应的服务。
就是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();
}
传入的Name返回的对象说明WINDOW_SERVICE WindowManager管理打开的窗口程序LAYOUT_INFLATER_SERVICELayoutInflater 取得xml里定义的viewACTIVITY_SERVICEActivityManager 管理应用程序的系统状态
POWER_SERVICE
PowerManger电源的服务ALARM_SERVICEAlarmManager闹钟的服务NOTIFICATION_SERVICE
NotificationManager状态栏的服务KEYGUARD_SERVICE KeyguardManager 键盘锁的服务LOCATION_SERVICE LocationManager 位置的服务,如GPSSEARCH_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();
}
阅读全文
0 0
- getSystemService
- getSystemService
- getSystemService
- getSystemService
- getSystemService
- getSystemService
- getSystemService
- getSystemService
- getSystemService
- getSystemService
- getSystemService ()
- getSystemService
- getSystemService
- getSystemService
- getSystemService
- getSystemService
- getSystemService
- getSystemService
- org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be res
- 学习Spring boot 注解 @Value @Component @ConfigurationProperties
- 快速 二进制,八进制,十进制,十二进制转换 .源码,反码,补码,
- springBoot动态加载资源文件
- 201503-1图像旋转
- getSystemService
- linux下程序如何实现单实例运行
- scala学习笔记:面向对象编程基础
- 全面屏的 iPhone X,雷军妥协的库克做到了
- GPU编程_The CUDA Toolkit v8.0 directory '' does not exist.
- Unexpected Exception caught setting 'uid' on 'class com.opensymphony.xwork2.ActionSupport: Erro
- uva 10327 Flip Sort
- 大端数与小端数
- Python GUI 开发框架