Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit afa97d34 authored by Wei Sheng Shih's avatar Wei Sheng Shih Committed by Android (Google) Code Review
Browse files

Merge "Revert^2 "Correct activity's lifecycle when the process was killed in...

Merge "Revert^2 "Correct activity's lifecycle when the process was killed in background."" into 24D1-dev
parents 06e4fec5 b7c1ba2d
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@ import static com.android.server.wm.ActivityRecord.State.PAUSED;
import static com.android.server.wm.ActivityRecord.State.PAUSING;
import static com.android.server.wm.ActivityRecord.State.RESTARTING_PROCESS;
import static com.android.server.wm.ActivityRecord.State.RESUMED;
import static com.android.server.wm.ActivityRecord.State.STOPPING;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_ALL;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_CLEANUP;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_IDLE;
@@ -104,6 +105,7 @@ import android.app.servertransaction.ActivityLifecycleItem;
import android.app.servertransaction.LaunchActivityItem;
import android.app.servertransaction.PauseActivityItem;
import android.app.servertransaction.ResumeActivityItem;
import android.app.servertransaction.StopActivityItem;
import android.companion.virtual.VirtualDeviceManager;
import android.content.ComponentName;
import android.content.Context;
@@ -944,8 +946,10 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
                if (andResume) {
                    lifecycleItem = ResumeActivityItem.obtain(r.token, isTransitionForward,
                            r.shouldSendCompatFakeFocus());
                } else {
                } else if (r.isVisibleRequested()) {
                    lifecycleItem = PauseActivityItem.obtain(r.token);
                } else {
                    lifecycleItem = StopActivityItem.obtain(r.token, 0 /* configChanges */);
                }

                // Schedule transaction.
@@ -1012,7 +1016,7 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
            // As part of the process of launching, ActivityThread also performs
            // a resume.
            rootTask.minimalResumeActivityLocked(r);
        } else {
        } else if (r.isVisibleRequested()) {
            // This activity is not starting in the resumed state... which should look like we asked
            // it to pause+stop (but remain visible), and it has done so and reported back the
            // current icicle and other state.
@@ -1020,6 +1024,9 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
                    + "(starting in paused state)", r);
            r.setState(PAUSED, "realStartActivityLocked");
            mRootWindowContainer.executeAppTransitionForAllDisplay();
        } else {
            // This activity is starting while invisible, so it should be stopped.
            r.setState(STOPPING, "realStartActivityLocked");
        }
        // Perform OOM scoring after the activity state is set, so the process can be updated with
        // the latest state.
+2 −3
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.times;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static com.android.server.wm.ActivityRecord.State.PAUSED;
import static com.android.server.wm.ActivityRecord.State.STOPPING;
import static com.android.server.wm.RecentsAnimationController.REORDER_KEEP_IN_PLACE;
import static com.android.server.wm.WindowContainer.POSITION_TOP;

@@ -164,13 +165,12 @@ public class RecentsAnimationTest extends WindowTestsBase {
        ActivityRecord recentsActivity = recentsStack.getTopNonFinishingActivity();
        // The activity is started in background so it should be invisible and will be stopped.
        assertThat(recentsActivity).isNotNull();
        assertThat(mSupervisor.mStoppingActivities).contains(recentsActivity);
        assertThat(recentsActivity.getState()).isEqualTo(STOPPING);
        assertFalse(recentsActivity.isVisibleRequested());

        // Assume it is stopped to test next use case.
        recentsActivity.activityStopped(null /* newIcicle */, null /* newPersistentState */,
                null /* description */);
        mSupervisor.mStoppingActivities.remove(recentsActivity);

        spyOn(recentsActivity);
        // Start when the recents activity exists. It should ensure the configuration.
@@ -178,7 +178,6 @@ public class RecentsAnimationTest extends WindowTestsBase {
                null /* recentsAnimationRunner */);

        verify(recentsActivity).ensureActivityConfiguration(eq(true) /* ignoreVisibility */);
        assertThat(mSupervisor.mStoppingActivities).contains(recentsActivity);
    }

    @Test