Android的 getSystemService

來源:互聯網
上載者:User
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();

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.