Loading services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +13 −2 Original line number Diff line number Diff line Loading @@ -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. */ Loading Loading @@ -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); } Loading Loading @@ -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); } Loading services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java +7 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading
services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +13 −2 Original line number Diff line number Diff line Loading @@ -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. */ Loading Loading @@ -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); } Loading Loading @@ -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); } Loading
services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java +7 −0 Original line number Diff line number Diff line Loading @@ -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 Loading