Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 系統關機流程分析

Android 系統關機流程分析

編輯:關於Android編程

正文

 

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

長按鍵對應的handler代碼:

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

[java]
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(); 
            } 
        } 
    }; 

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

[java]
static void android_os_Power_shutdown(JNIEnv *env, jobject clazz) 

    sync(); 
#ifdef HAVE_ANDROID_OS 
    reboot(RB_POWER_OFF); 
#endif 

static void android_os_Power_shutdown(JNIEnv *env, jobject clazz)
{
    sync();
#ifdef HAVE_ANDROID_OS
    reboot(RB_POWER_OFF);
#endif
}
sync, reboot 為linux系統調用,進入linux內核關機流程。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved