雑記帳 [Android]Shutdownの処理の流れ
FC2ブログ

2010'11.12 (Fri)

[Android]Shutdownの処理の流れ

訳あってAndroidのシャットダウン処理を調べたので覚書。

実際にShutdownの処理を行うのはShutdownThreadクラスに実装されている。
(framework/base/core/java/com/android/internal/app/ShutdownThread.java)

実際にはShutdownThread.shutdown()が呼び出される。
ここで電源をOFFしてもよいか確認用のダイアログを表示し、OKであれば実際のシャットダウン処理を開始する。
beginShutdownSequence()で電源オフ時に表示されるプログレスダイアログを表示し、シャットダウン中に電源が切れないようにWAKE_LOCKを確保する。
その後シャットダウンスレッドが動き始める。

まず、Intent.ACTION_SHUTDOWNをBroadcastで発行する。
その後、IActivityManager.shutdown()を実行する。ここでSHUTDOWN_TRANSACTIONを発行する。

その後、無線系デバイスの電源OFF処理、マウントされたストレージのアンマウント処理を行い、
要因によって再起動、もしくは電源オフする。
再起動/電源オフをするのはPowerクラスで行う。(frameworks/base/core/java/android/os/Power.java)
この中でshutdown/rebootを実行しているが、実態はframeworks/base/core/jni/android_os_Power.cppに実装
されていて、ここでLinuxのシステムコールを呼び出して再起動/電源オフを実現している。


ではこのShutdownThread.shutdown()はどこから呼び出されるのか?
ソースのgrepを行うと、

frameworks/policies/base/{mid, phone}/com/android/internal/policy/impl/GlobalAction.java
frameworks/policies/base/{mid, phone}/com/android/internal/policy/impl/PowerDialog.java

から呼び出されているが、PowerDialogは今はどこからも呼び出されていない様に見える。
GlobalActionクラスでIntent.ACTION_CLOSE_SYSTEM_DIALOGSかACTION_SCREEN_OFFをレシーバーに登録し、受けたらhandlerにMESSAGE_DISMISSをsendする。そのhandlerの中からダイアログを表示し、シャットダウンやマナーモードや機内モードに切り替えを行うDialogの表示を行っているようだ。

しかし、互換性のためか、過去の使用されていないコードまで残っているのはちょっと勘弁して欲しい。
センサーまわりもそんなんだよなー。。。

テーマ : android - ジャンル : コンピュータ

22:56  |  Android  |  TB(0)  |  CM(2)  |  EDIT  |  ↑Top

Comment

質問させてください。

初めまして。
いきなりのコメント失礼します。

私はandroidの開発を始めて数ヶ月のものですが、
androidでは、アプリからシャットダウンは出来ないのでしょうか?

intent.setAction(Intent.ACTION_SHUTDOWN)、
shutdownThread()等も使用できないようなのです。

色々調べているのですが、情報が少なすぎて手がかりがつかめません…。

お忙しいと思いますが、何か情報はありませんでしょうか?
駆け出しもの | 2010年11月15日(月) 14:58 | URL | コメント編集

Re: 質問させてください。

亀レスすみません。


> intent.setAction(Intent.ACTION_SHUTDOWN)、
> shutdownThread()等も使用できないようなのです。

これらはそれなりに権限が必要なのでアプリレベルで呼び出しても動かないと思います。
rebootするのであれば
android.os.PowerManagerのrebootを用いればできるはずです。
こちらに参考になりそうな記事がありましたのでURLあげておきます。
http://hirokuma.typepad.jp/blog/2010/09/pwrwidgetreboot%E3%81%99%E3%82%8B%E3%82%A6%E3%82%A3%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88.html

Yこば | 2010年11月28日(日) 00:42 | URL | コメント編集

コメントを投稿する


 管理者だけに表示  (非公開コメント投稿可能)

▲TOP

Trackback

この記事のトラックバックURL

→http://kobayuta.blog47.fc2.com/tb.php/239-b5719308

この記事にトラックバックする(FC2ブログユーザー)

この記事へのトラックバック

▲TOP

 | HOME |