diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index a178f3f45c915adfc10d5582280db962605cce5a..bbf80fb303173c394f2dcb54479d773b5e0e5f1c 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -9018,6 +9018,21 @@ public final class ActivityManagerService extends ActivityManagerNative // TASK MANAGEMENT // ========================================================= + public int getAppTasksCnt(String callingPackage) { + final int N = mRecentTasks.size(); + int cnt = 0; + for (int i = 0; i < N; i++) { + TaskRecord tr = mRecentTasks.get(i); + Intent intent = tr.getBaseIntent(); + if (intent == null || + !callingPackage.equals(intent.getComponent().getPackageName())) { + continue; + } + cnt += 1; + } + return cnt; + } + @Override public List getAppTasks(String callingPackage) { int callingUid = Binder.getCallingUid(); @@ -9670,11 +9685,12 @@ public final class ActivityManagerService extends ActivityManagerNative final TaskRecord tr = mStackSupervisor.anyTaskForIdLocked( taskId, !RESTORE_FROM_RECENTS, INVALID_STACK_ID); if (tr != null) { - tr.removeTaskActivitiesLocked(); - cleanUpRemovedTaskLocked(tr, killProcess, removeFromRecents); ComponentName component = tr.getBaseIntent().getComponent(); final String pkgName = component.getPackageName(); - if (validatePkgName(pkgName)) { + tr.removeTaskActivitiesLocked(); + cleanUpRemovedTaskLocked(tr, killProcess, removeFromRecents); + int cnt = getAppTasksCnt(pkgName); + if (cnt == 0 && validatePkgName(pkgName)) { String cmd = "am force-stop " + pkgName; try { Runtime.getRuntime().exec(cmd); @@ -19083,7 +19099,7 @@ public final class ActivityManagerService extends ActivityManagerNative if ((changes&ActivityInfo.CONFIG_LOCALE) != 0) { intent = new Intent(Intent.ACTION_LOCALE_CHANGED); intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); - if (initLocale || !mProcessesReady) { + if (initLocale || !mProcessesReady) { intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); } broadcastIntentLocked(null, null, intent,