diff options
author | Dianne Hackborn <hackbod@google.com> | 2011-07-01 17:13:40 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-07-01 17:13:40 -0700 |
commit | 63acea6ad4a9316e1450dea47840f45df4aaed25 (patch) | |
tree | 00eb8cd54245741b351e211c9145e89c95dd2e88 /services | |
parent | f03712bf540db15d0594b848e63c207fd50e9379 (diff) | |
parent | 8894cc5ed4bacb72ef8158459fe7760903d135b8 (diff) | |
download | frameworks_base-63acea6ad4a9316e1450dea47840f45df4aaed25.zip frameworks_base-63acea6ad4a9316e1450dea47840f45df4aaed25.tar.gz frameworks_base-63acea6ad4a9316e1450dea47840f45df4aaed25.tar.bz2 |
Merge "When removing a task, also kill its processes."
Diffstat (limited to 'services')
-rw-r--r-- | services/java/com/android/server/am/ActivityManagerService.java | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index bf877f6..48b0b66 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -5171,7 +5171,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } - private void removeTaskProcessesLocked(ActivityRecord root) { + private void cleanUpRemovedTaskLocked(ActivityRecord root, boolean killProcesses) { TaskRecord tr = root.task; Intent baseIntent = new Intent( tr.intent != null ? tr.intent : tr.affinityIntent); @@ -5194,6 +5194,7 @@ public final class ActivityManagerService extends ActivityManagerNative ServiceRecord sr = services.get(i); if (sr.startRequested) { if ((sr.serviceInfo.flags&ServiceInfo.FLAG_STOP_WITH_TASK) != 0) { + Slog.i(TAG, "Stopping service " + sr.shortName + ": remove task"); stopServiceLocked(sr); } else { sr.pendingStarts.add(new ServiceRecord.StartItem(sr, true, @@ -5205,26 +5206,28 @@ public final class ActivityManagerService extends ActivityManagerNative } } - // Find any running processes associated with this app. - ArrayList<ProcessRecord> procs = new ArrayList<ProcessRecord>(); - SparseArray<ProcessRecord> appProcs - = mProcessNames.getMap().get(component.getPackageName()); - if (appProcs != null) { - for (int i=0; i<appProcs.size(); i++) { - procs.add(appProcs.valueAt(i)); - } - } - - // Kill the running processes. - for (int i=0; i<procs.size(); i++) { - ProcessRecord pr = procs.get(i); - if (pr.setSchedGroup == Process.THREAD_GROUP_BG_NONINTERACTIVE) { - Slog.i(TAG, "Killing " + pr + ": remove task"); - EventLog.writeEvent(EventLogTags.AM_KILL, pr.pid, - pr.processName, pr.setAdj, "remove task"); - Process.killProcessQuiet(pr.pid); - } else { - pr.waitingToKill = "remove task"; + if (killProcesses) { + // Find any running processes associated with this app. + ArrayList<ProcessRecord> procs = new ArrayList<ProcessRecord>(); + SparseArray<ProcessRecord> appProcs + = mProcessNames.getMap().get(component.getPackageName()); + if (appProcs != null) { + for (int i=0; i<appProcs.size(); i++) { + procs.add(appProcs.valueAt(i)); + } + } + + // Kill the running processes. + for (int i=0; i<procs.size(); i++) { + ProcessRecord pr = procs.get(i); + if (pr.setSchedGroup == Process.THREAD_GROUP_BG_NONINTERACTIVE) { + Slog.i(TAG, "Killing " + pr.toShortString() + ": remove task"); + EventLog.writeEvent(EventLogTags.AM_KILL, pr.pid, + pr.processName, pr.setAdj, "remove task"); + Process.killProcessQuiet(pr.pid); + } else { + pr.waitingToKill = "remove task"; + } } } } @@ -5238,11 +5241,8 @@ public final class ActivityManagerService extends ActivityManagerNative ActivityRecord r = mMainStack.removeTaskActivitiesLocked(taskId, -1); if (r != null) { mRecentTasks.remove(r.task); - - if ((flags&ActivityManager.REMOVE_TASK_KILL_PROCESS) != 0) { - removeTaskProcessesLocked(r); - } - + cleanUpRemovedTaskLocked(r, + (flags&ActivityManager.REMOVE_TASK_KILL_PROCESS) != 0); return true; } } finally { @@ -13169,7 +13169,7 @@ public final class ActivityManagerService extends ActivityManagerNative + " to " + app.curSchedGroup); if (app.waitingToKill != null && app.setSchedGroup == Process.THREAD_GROUP_BG_NONINTERACTIVE) { - Slog.i(TAG, "Killing " + app + ": " + app.waitingToKill); + Slog.i(TAG, "Killing " + app.toShortString() + ": " + app.waitingToKill); EventLog.writeEvent(EventLogTags.AM_KILL, app.pid, app.processName, app.setAdj, app.waitingToKill); Process.killProcessQuiet(app.pid); |