Android 7.1 Klicken Sie auf die Schaltfläche „Alle löschen“, um alle laufenden Prozesse zu löschen (einschließlich der im Hintergrund abgespielten Musik).

Android 7.1 Klicken Sie auf die Schaltfläche „Alle löschen“, um alle laufenden Prozesse zu löschen (einschließlich der im Hintergrund abgespielten Musik).

Kürzlich habe ich Kundenfeedback erhalten, dass die Hintergrundmusik nicht beendet wird und weiterhin abgespielt wird, wenn die Musik im Hintergrund abgespielt wird und auf die Schaltfläche „Alle löschen“ geklickt wird. Nach dem Klicken auf „Alle löschen“ müssen alle im Hintergrund laufenden Prozesse beendet werden ". Die spezifischen Änderungen sind wie folgt:

/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";
-            }
        }
    }

Neu kompilieren und überprüfen, die Änderung wird wirksam, klicken Sie auf die Schaltfläche „Alle löschen“ und die im Hintergrund abgespielte Musik wird beendet.

おすすめ

転載: blog.csdn.net/Jeffries_C/article/details/134737559