質問: ActivityのライフサイクルとUIスレッドの処理について質問です。onCreateメソッドでHandlerを生成し、ログを表示する処理をpostしたところ、実行した際に、onResumeの後にログが表示されました。これは、ログを表示する処理がUIスレッドのMessage queueに追加されるより前に、Message queueにonRsumeの処理があるということでしょうか?Handlerでpostした処理が実行されるタイミングがいまいちわかりません。
回答: はい、その認識で正しいです。 `Handler` は生成したスレッド (ここでは UI スレッド) の `Looper` に処理をキューイングします。 `onCreate()` で追加した Message より先に `onResume()` が呼ばれるのがなぜかというと、 * Activity の起動処理もまた、UI スレッドにキューイングされている処理であること * `onCreate()` のコールスタックを辿り、`ActivityThread#handleLaunchActivity()`メソッドの処理を読むこと で分かります。説明に必要最低限な処理を抜き出すと以下になります。 ``` // ここで onCreate() が呼び出されます Activity a = performLaunchActivity(r, customIntent); if (a != null) { r.createdConfig = new Configuration(mConfiguration); Bundle oldState = r.state; // ここで onResume() が呼び出されます handleResumeActivity(r.token, false, r.isForward, !r.activity.mFinished && !r.startsNotResumed); // 以下略 } ``` `onCreate()` の呼び出しと、`onResume()` の呼び出しはひとつのキューイングされた処理の中で行なわれているのです。 これらの処理が終わって初めて次のメッセージが取り出されるので、`Handler#post()` した内容は、`onResume()` の後で実行されます。