diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index b043311b2d5ef..61f2af089e087 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -3431,8 +3431,10 @@ final class ActivityStack { mWindowManager.prepareAppTransition(transit, false); mWindowManager.setAppVisibility(r.appToken, false); mWindowManager.executeAppTransition(); + mStackSupervisor.mWaitingVisibleActivities.add(r); } - return finishCurrentActivityLocked(r, FINISH_AFTER_PAUSE, oomAdj) == null; + return finishCurrentActivityLocked(r, + r.visible ? FINISH_AFTER_VISIBLE : FINISH_AFTER_PAUSE, oomAdj) == null; } else { if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Finish waiting for pause of: " + r); } diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index 4d24a8b7dc97f..6622b34c11066 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -527,8 +527,13 @@ class ActivityStarter { doPendingActivityLaunchesLocked(false); - err = startActivityUnchecked( - r, sourceRecord, voiceSession, voiceInteractor, startFlags, true, options, inTask); + try { + mService.mWindowManager.deferSurfaceLayout(); + err = startActivityUnchecked(r, sourceRecord, voiceSession, voiceInteractor, startFlags, + true, options, inTask); + } finally { + mService.mWindowManager.continueSurfaceLayout(); + } postStartActivityUncheckedProcessing(r, err, stack.mStackId); return err; }