2012/03/26

Android:ランチャーActivityを起動しているのは誰?


ActivityStack.resumeTopActivityLocked内で、Activityが1つも起動されていない場合、
ランチャーを起動するようになっています。

これにより、端末起動時にはまずランチャーが起動されることになります。

・ランチャー起動までのスタック
com.android.server.am.ActivityManagerService.startHomeActivityLocked()
com.android.server.am.ActivityStack.resumeTopActivityLocked(ActivityRecord)
com.android.server.am.ActivityManagerService.systemReady(Runnable)

ActivityManagerService.java
public void systemReady(final Runnable goingCallback) {
    mMainStack.resumeTopActivityLocked(null);

ActivityStack.java
final boolean resumeTopActivityLocked(ActivityRecord prev) {
    // Find the first activity that is not finishing.
    ActivityRecord next = topRunningActivityLocked(null);

    if (next == null) {
        // There are no more activities!  Let's just start up the
        // Launcher...
        if (mMainStack) {
            return mService.startHomeActivityLocked();  // ランチャー起動
        }
    }

systemReadyが呼ばれる契機は、Androidの起動シーケンスに関わる話題なので割愛。

以上です。