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

Commit 89563b52 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Avoid killing task process after its activity was died" into main

parents a14af1e4 0e0842f3
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -621,6 +621,13 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
        mFinishingActivities.remove(r);

        stopWaitingForActivityVisible(r);

        final Task task = r.getTask();
        if (task != null && task.mKillProcessesOnDestroyed && task.getTopMostActivity() == r) {
            // The activity is destroyed or its process is died, so cancel the pending kill.
            task.mKillProcessesOnDestroyed = false;
            removeTimeoutOfKillProcessesOnDestroyed(task);
        }
    }

    /** There is no valid launch time, just stop waiting. */
@@ -1903,9 +1910,13 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
        killTaskProcessesIfPossible(task);
    }

    private void removeTimeoutOfKillProcessesOnDestroyed(Task task) {
        mHandler.removeMessages(KILL_TASK_PROCESSES_TIMEOUT_MSG, task);
    }

    void killTaskProcessesOnDestroyedIfNeeded(Task task) {
        if (task == null || !task.mKillProcessesOnDestroyed) return;
        mHandler.removeMessages(KILL_TASK_PROCESSES_TIMEOUT_MSG, task);
        removeTimeoutOfKillProcessesOnDestroyed(task);
        killTaskProcessesIfPossible(task);
    }

@@ -2778,7 +2789,7 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
                } break;
                case KILL_TASK_PROCESSES_TIMEOUT_MSG: {
                    final Task task = (Task) msg.obj;
                    if (task.mKillProcessesOnDestroyed) {
                    if (task.mKillProcessesOnDestroyed && task.hasActivity()) {
                        Slog.i(TAG, "Destroy timeout of remove-task, attempt to kill " + task);
                        killTaskProcessesIfPossible(task);
                    }
+7 −0
Original line number Diff line number Diff line
@@ -1038,6 +1038,13 @@ public class RecentTasksTest extends WindowTestsBase {
        top.setState(ActivityRecord.State.DESTROYING, "test");
        top.destroyed("test");
        assertFalse(task.mKillProcessesOnDestroyed);

        // If the process is died, the state should be cleared.
        final Task lastTask = tasks.get(0);
        lastTask.addChild(top);
        lastTask.mKillProcessesOnDestroyed = true;
        top.handleAppDied();
        assertFalse(lastTask.mKillProcessesOnDestroyed);
    }

    @Test