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

This commit is contained in:
Treehugger Robot
2023-07-27 04:17:36 +00:00
committed by Android (Google) Code Review
2 changed files with 20 additions and 2 deletions

View File

@@ -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);
}

View File

@@ -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