2011年07月14日

Androidのshutdownシーケンス

Android端末では電源を切るときには、電源キーを長押しするとシャットダウンのメニューが表示されて、そこから電源OFFを選択すると実際に電源が切れます。

これがどこで行われているのか、ソースコードを追いかけました。

(English version of this page)



シャットダウンのメニューの表示まで

電源キーの長押しのハンドリングをしているのはここ。

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

Runnable mPowerLongPress;

シャットダウンのダイアログはこれ。

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

ここで電源オフが選択されると ShutdownThread.shutdown が呼ばれる。

シャットダウンの処理

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

beginShutdownSequenceを経由して、実際のシャットダウンの処理はrunの中で行われます。

  1. ACTION_SHUTDOWNのIntentをブロードキャストする。
  2. ActivityManagerサービスのshutdownを呼ぶ。
  3. Bluetoothサービスのdisableを呼ぶ。
  4. PhoneサービスのsetRadio(false)を呼ぶ。
  5. Mountサービスのshutdownを呼ぶ。
  6. バイブレータをふるわせる。
  7. Power.shutdown();

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

Power#shutdownはネイティブメソッド

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カーネルの中でこれらの処理が行われます。



トラックバックURL

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード