diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index 37fda4ce217a9..60ca725b118e3 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -1989,6 +1989,13 @@ class ActivityStarter { return START_SUCCESS; } + // The reusedActivity could be finishing, for example of starting an activity with + // FLAG_ACTIVITY_CLEAR_TOP flag. In that case, use the top running activity in the + // task instead. + targetTaskTop = targetTaskTop.finishing + ? targetTask.getTopNonFinishingActivity() + : targetTaskTop; + // At this point we are certain we want the task moved to the front. If we need to dismiss // any other always-on-top root tasks, now is the time to do it. if (targetTaskTop.canTurnScreenOn() && mService.mInternal.isDreaming()) { @@ -2005,11 +2012,8 @@ class ActivityStarter { // We didn't do anything... but it was needed (a.k.a., client don't use that intent!) // And for paranoia, make sure we have correctly resumed the top activity. resumeTargetRootTaskIfNeeded(); - // The reusedActivity could be finishing, for example of starting an activity with - // FLAG_ACTIVITY_CLEAR_TOP flag. In that case, return the top running activity in the - // task instead. - mLastStartActivityRecord = - targetTaskTop.finishing ? targetTask.getTopNonFinishingActivity() : targetTaskTop; + + mLastStartActivityRecord = targetTaskTop; return mMovedToFront ? START_TASK_TO_FRONT : START_DELIVERED_TO_TOP; }