android 關機流程分析

嵌入式系統一般都有一個關機按鍵,長按這個按鍵系統會彈出關機對話框,提示關機確認,

關機動作從按鍵觸發中斷,linux kernel層給android framework層返回按鍵事件進入  framework層,再從 framework層到kernel層執行kernel層關機任務。

長按鍵對應的handler代碼:

frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java
Runnable mPowerLongPress;

private final Runnable mPowerLongPress = new Runnable() {
        public void run() {
            if (!mPowerKeyHandled) {
                mPowerKeyHandled = true;
                performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
                sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
                showGlobalActionsDialog();
            }
        }
    };

mPowerLongPress 啓動關機對話框

(frameworks/policies/base/phone/com/android/internal/policy/impl/GlobalActions.java)

如果我們選擇Power OFF’,會調用 ShutdownThread.shutdown. 啓動關機線程執行關機動作。

frameworks/base/core/java/com/android/internal/app/ShutdownThread.java

 真正關機 流程:

(1)廣播全局事件, ACTION_SHUTDOWN Intent

(2)shutdown   ActivityManager 服務

(3) 停止藍牙服務

(4) 停止 電話服務 (radio phone service)

(5)停止mount 服務

(6) 調用 Power.shutdown() 進入native 層

frameworks/base/core/java/android/os/Power.java

power的native實現代碼:

frameworks/base/core/jni/android_os_Power.cpp

static void android_os_Power_shutdown(JNIEnv *env, jobject clazz)
{
    sync();
#ifdef HAVE_ANDROID_OS
    reboot(RB_POWER_OFF);
#endif
}

sync, reboot 爲linux系統調用,進入linux內核關機流程。

完畢。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章