diff options
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index ae0910ce716b..dad312505ec9 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -22875,6 +22875,8 @@ public class ActivityManagerService extends IActivityManager.Stub requestPssAllProcsLocked(now, false, mProcessStats.isMemFactorLowered()); } + ArrayList<UidRecord> becameIdle = null; + // Update from any uid changes. if (mLocalPowerManager != null) { mLocalPowerManager.startUidChanges(); @@ -22907,6 +22909,10 @@ public class ActivityManagerService extends IActivityManager.Stub } if (uidRec.idle && !uidRec.setIdle) { uidChange = UidRecord.CHANGE_IDLE; + if (becameIdle == null) { + becameIdle = new ArrayList<>(); + } + becameIdle.add(uidRec); } } else { if (uidRec.idle) { @@ -22938,6 +22944,14 @@ public class ActivityManagerService extends IActivityManager.Stub mLocalPowerManager.finishUidChanges(); } + if (becameIdle != null) { + // If we have any new uids that became idle this time, we need to make sure + // they aren't left with running services. + for (int i = becameIdle.size() - 1; i >= 0; i--) { + mServices.stopInBackgroundLocked(becameIdle.get(i).uid); + } + } + if (mProcessStats.shouldWriteNowLocked(now)) { mHandler.post(new Runnable() { @Override public void run() { |