From f83f743e86481c1f9fe88149452c51ee62b20546 Mon Sep 17 00:00:00 2001 From: Jing Ji Date: Tue, 3 May 2022 14:29:32 -0700 Subject: [PATCH] Check the process state for the killProcessesForRemovedTask Upon removing tasks from the recent UI, we should check if the process state of the target process is foreground or not, and don't kill it if it's still in the foreground - the killing will be deferred as long as it's falling into the background state (not perceptible anymore). Bug: 227303045 Test: Manual Change-Id: If2b55e5159ee3642c96f0337e82c09faaf22de10 --- .../core/java/com/android/server/am/ActivityManagerService.java | 2 +- services/core/java/com/android/server/am/OomAdjuster.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 9580c6c09cd3e..bcae70f13668e 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -16654,7 +16654,7 @@ public class ActivityManagerService extends IActivityManager.Stub final WindowProcessController wpc = (WindowProcessController) procsToKill.get(i); final ProcessRecord pr = (ProcessRecord) wpc.mOwner; - if (pr.mState.getSetSchedGroup() == ProcessList.SCHED_GROUP_BACKGROUND + if (ActivityManager.isProcStateBackground(pr.mState.getSetProcState()) && pr.mReceivers.numberOfCurReceivers() == 0) { pr.killLocked("remove task", ApplicationExitInfo.REASON_USER_REQUESTED, ApplicationExitInfo.SUBREASON_REMOVE_TASK, true); diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java index 4ecc36d2750cb..9e96829f9be21 100644 --- a/services/core/java/com/android/server/am/OomAdjuster.java +++ b/services/core/java/com/android/server/am/OomAdjuster.java @@ -2604,7 +2604,7 @@ public class OomAdjuster { reportOomAdjMessageLocked(TAG_OOM_ADJ, msg); } if (app.getWaitingToKill() != null && app.mReceivers.numberOfCurReceivers() == 0 - && state.getSetSchedGroup() == ProcessList.SCHED_GROUP_BACKGROUND) { + && ActivityManager.isProcStateBackground(state.getSetProcState())) { app.killLocked(app.getWaitingToKill(), ApplicationExitInfo.REASON_USER_REQUESTED, ApplicationExitInfo.SUBREASON_REMOVE_TASK, true); success = false;