Android 7.1 点击清空全部按钮清空一切运行进程(包括后台在播音乐)
近来收到客户反馈说音乐在后台播放时点击“清空全部”按钮后台音乐没有被kill掉,仍在播放,需要在点击“清空全部”后kill掉一切后台运行进程,具体修改参照如下:
/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
private void cleanUpRemovedTaskLocked(TaskRecord tr, boolean killProcess,boolean removeFromRecents) {if (removeFromRecents) {mRecentTasks.remove(tr);tr.removedFromRecents();}ComponentName component = tr.getBaseIntent().getComponent();if (component == null) {Slog.w(TAG, "No component for base intent of task: " + tr);return;}// Find any running services associated with this app and stop if needed.mServices.cleanUpRemovedTaskLocked(tr, component, new Intent(tr.getBaseIntent()));if (!killProcess) {return;}// Determine if the process(es) for this task should be killed.final String pkg = component.getPackageName();ArrayList<ProcessRecord> procsToKill = new ArrayList<>();ArrayMap<String, SparseArray<ProcessRecord>> pmap = mProcessNames.getMap();for (int i = 0; i < pmap.size(); i++) {SparseArray<ProcessRecord> uids = pmap.valueAt(i);for (int j = 0; j < uids.size(); j++) {ProcessRecord proc = uids.valueAt(j);if (proc.userId != tr.userId) {// Don't kill process for a different user.continue;}if (proc == mHomeProcess) {// Don't kill the home process along with tasks from the same package.continue;}if (!proc.pkgList.containsKey(pkg)) {// Don't kill process that is not associated with this task.continue;}for (int k = 0; k < proc.activities.size(); k++) {TaskRecord otherTask = proc.activities.get(k).task;if (tr.taskId != otherTask.taskId && otherTask.inRecents) {// Don't kill process(es) that has an activity in a different task that is// also in recents.return;}}- if (proc.foregroundServices) {
- // Don't kill process(es) with foreground service.
- return;
- }// Add process to kill list.procsToKill.add(proc);}}// Kill the running processes.for (int i = 0; i < procsToKill.size(); i++) {ProcessRecord pr = procsToKill.get(i);- if (pr.setSchedGroup == ProcessList.SCHED_GROUP_BACKGROUND
- && pr.curReceiver == null) {pr.kill("remove task", true);
- } else {
- // We delay killing processes that are not in the background or running a receiver.
- pr.waitingToKill = "remove task";
- }}}
重新编译验证,修改生效,点击“清空全部”按钮后台在播音乐被kill掉