Android之getSystemService
2011-05-03 15:47:57| 分類:
Android |字型大小 訂閱
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();
} |