Merge "Avoid killing task process after its activity was died" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
89563b52ea
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user