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の起動シーケンスに関わる話題なので割愛。
以上です。