嵌入式系統一般都有一個關機按鍵,長按這個按鍵系統會彈出關機對話框,提示關機確認, 關機動作從按鍵觸發中斷,linux kernel層给android framework層返回按鍵事件進入 framework層,再從 framework層到kernel層執行kernel層關機任務。 長按鍵對應的handler代碼:
frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java
private
final Runnable mPowerLongPress = new Runnable() { 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內核關機流程。 完畢。 |