Loading services/core/java/com/android/server/am/ActivityManagerService.java +15 −1 Original line number Diff line number Diff line Loading @@ -5299,7 +5299,7 @@ public final class ActivityManagerService extends ActivityManagerNative private final boolean killPackageProcessesLocked(String packageName, int appId, int userId, int minOomAdj, boolean callerWillRestart, boolean allowRestart, boolean doit, boolean evenPersistent, String reason) { ArrayList<ProcessRecord> procs = new ArrayList<ProcessRecord>(); ArrayList<ProcessRecord> procs = new ArrayList<>(); // Remove all processes this package may have touched: all with the // same UID (except for the system or root user), and all whose name Loading Loading @@ -5446,6 +5446,13 @@ public final class ActivityManagerService extends ActivityManagerNative for (int i = providers.size() - 1; i >= 0; i--) { removeDyingProviderLocked(null, providers.get(i), true); } // Clean-up disabled broadcast receivers. for (int i = mBroadcastQueues.length - 1; i >= 0; i--) { mBroadcastQueues[i].cleanupDisabledPackageReceiversLocked( packageName, disabledClasses, userId, true); } } private final boolean forceStopPackageLocked(String packageName, int appId, Loading Loading @@ -5542,6 +5549,13 @@ public final class ActivityManagerService extends ActivityManagerNative // Remove transient permissions granted from/to this package/user removeUriPermissionsForPackageLocked(packageName, userId, false); if (doit) { for (i = mBroadcastQueues.length - 1; i >= 0; i--) { didSomething |= mBroadcastQueues[i].cleanupDisabledPackageReceiversLocked( packageName, null, userId, doit); } } if (packageName == null || uninstalling) { // Remove pending intents. For now we only do this when force // stopping users, because we have some problems when doing this Loading services/core/java/com/android/server/am/BroadcastQueue.java +27 −4 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Set; import android.app.ActivityManager; import android.app.AppGlobals; Loading Loading @@ -1097,6 +1098,28 @@ public final class BroadcastQueue { mSummaryHistoryNext = ringAdvance(mSummaryHistoryNext, 1, MAX_BROADCAST_SUMMARY_HISTORY); } boolean cleanupDisabledPackageReceiversLocked( String packageName, Set<String> filterByClasses, int userId, boolean doit) { boolean didSomething = false; for (int i = mParallelBroadcasts.size() - 1; i >= 0; i--) { didSomething |= mParallelBroadcasts.get(i).cleanupDisabledPackageReceiversLocked( packageName, filterByClasses, userId, doit); if (!doit && didSomething) { return true; } } for (int i = mOrderedBroadcasts.size() - 1; i >= 0; i--) { didSomething |= mOrderedBroadcasts.get(i).cleanupDisabledPackageReceiversLocked( packageName, filterByClasses, userId, doit); if (!doit && didSomething) { return true; } } return didSomething; } final void logBroadcastReceiverDiscardLocked(BroadcastRecord r) { if (r.nextReceiver > 0) { Object curReceiver = r.receivers.get(r.nextReceiver-1); Loading services/core/java/com/android/server/am/BroadcastRecord.java +33 −1 Original line number Diff line number Diff line Loading @@ -26,12 +26,14 @@ import android.os.Binder; import android.os.Bundle; import android.os.IBinder; import android.os.SystemClock; import android.os.UserHandle; import android.util.PrintWriterPrinter; import android.util.TimeUtils; import java.io.PrintWriter; import java.util.Date; import java.util.List; import java.util.Set; /** * An active intent broadcast. Loading Loading @@ -205,6 +207,36 @@ final class BroadcastRecord extends Binder { state = IDLE; } boolean cleanupDisabledPackageReceiversLocked( String packageName, Set<String> filterByClasses, int userId, boolean doit) { if ((userId != UserHandle.USER_ALL && this.userId != userId) || receivers == null) { return false; } boolean didSomething = false; Object o; for (int i = receivers.size() - 1; i >= 0; i--) { o = receivers.get(i); if (!(o instanceof ResolveInfo)) { continue; } ActivityInfo info = ((ResolveInfo)o).activityInfo; final boolean sameComponent = packageName == null || (info.applicationInfo.packageName.equals(packageName) && (filterByClasses == null || filterByClasses.contains(info.name))); if (sameComponent) { if (!doit) { return true; } didSomething = true; receivers.remove(i); } } return didSomething; } public String toString() { return "BroadcastRecord{" + Integer.toHexString(System.identityHashCode(this)) Loading Loading
services/core/java/com/android/server/am/ActivityManagerService.java +15 −1 Original line number Diff line number Diff line Loading @@ -5299,7 +5299,7 @@ public final class ActivityManagerService extends ActivityManagerNative private final boolean killPackageProcessesLocked(String packageName, int appId, int userId, int minOomAdj, boolean callerWillRestart, boolean allowRestart, boolean doit, boolean evenPersistent, String reason) { ArrayList<ProcessRecord> procs = new ArrayList<ProcessRecord>(); ArrayList<ProcessRecord> procs = new ArrayList<>(); // Remove all processes this package may have touched: all with the // same UID (except for the system or root user), and all whose name Loading Loading @@ -5446,6 +5446,13 @@ public final class ActivityManagerService extends ActivityManagerNative for (int i = providers.size() - 1; i >= 0; i--) { removeDyingProviderLocked(null, providers.get(i), true); } // Clean-up disabled broadcast receivers. for (int i = mBroadcastQueues.length - 1; i >= 0; i--) { mBroadcastQueues[i].cleanupDisabledPackageReceiversLocked( packageName, disabledClasses, userId, true); } } private final boolean forceStopPackageLocked(String packageName, int appId, Loading Loading @@ -5542,6 +5549,13 @@ public final class ActivityManagerService extends ActivityManagerNative // Remove transient permissions granted from/to this package/user removeUriPermissionsForPackageLocked(packageName, userId, false); if (doit) { for (i = mBroadcastQueues.length - 1; i >= 0; i--) { didSomething |= mBroadcastQueues[i].cleanupDisabledPackageReceiversLocked( packageName, null, userId, doit); } } if (packageName == null || uninstalling) { // Remove pending intents. For now we only do this when force // stopping users, because we have some problems when doing this Loading
services/core/java/com/android/server/am/BroadcastQueue.java +27 −4 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Set; import android.app.ActivityManager; import android.app.AppGlobals; Loading Loading @@ -1097,6 +1098,28 @@ public final class BroadcastQueue { mSummaryHistoryNext = ringAdvance(mSummaryHistoryNext, 1, MAX_BROADCAST_SUMMARY_HISTORY); } boolean cleanupDisabledPackageReceiversLocked( String packageName, Set<String> filterByClasses, int userId, boolean doit) { boolean didSomething = false; for (int i = mParallelBroadcasts.size() - 1; i >= 0; i--) { didSomething |= mParallelBroadcasts.get(i).cleanupDisabledPackageReceiversLocked( packageName, filterByClasses, userId, doit); if (!doit && didSomething) { return true; } } for (int i = mOrderedBroadcasts.size() - 1; i >= 0; i--) { didSomething |= mOrderedBroadcasts.get(i).cleanupDisabledPackageReceiversLocked( packageName, filterByClasses, userId, doit); if (!doit && didSomething) { return true; } } return didSomething; } final void logBroadcastReceiverDiscardLocked(BroadcastRecord r) { if (r.nextReceiver > 0) { Object curReceiver = r.receivers.get(r.nextReceiver-1); Loading
services/core/java/com/android/server/am/BroadcastRecord.java +33 −1 Original line number Diff line number Diff line Loading @@ -26,12 +26,14 @@ import android.os.Binder; import android.os.Bundle; import android.os.IBinder; import android.os.SystemClock; import android.os.UserHandle; import android.util.PrintWriterPrinter; import android.util.TimeUtils; import java.io.PrintWriter; import java.util.Date; import java.util.List; import java.util.Set; /** * An active intent broadcast. Loading Loading @@ -205,6 +207,36 @@ final class BroadcastRecord extends Binder { state = IDLE; } boolean cleanupDisabledPackageReceiversLocked( String packageName, Set<String> filterByClasses, int userId, boolean doit) { if ((userId != UserHandle.USER_ALL && this.userId != userId) || receivers == null) { return false; } boolean didSomething = false; Object o; for (int i = receivers.size() - 1; i >= 0; i--) { o = receivers.get(i); if (!(o instanceof ResolveInfo)) { continue; } ActivityInfo info = ((ResolveInfo)o).activityInfo; final boolean sameComponent = packageName == null || (info.applicationInfo.packageName.equals(packageName) && (filterByClasses == null || filterByClasses.contains(info.name))); if (sameComponent) { if (!doit) { return true; } didSomething = true; receivers.remove(i); } } return didSomething; } public String toString() { return "BroadcastRecord{" + Integer.toHexString(System.identityHashCode(this)) Loading