diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java index e0fab2cfec21c..153ad1ec1b52d 100644 --- a/services/core/java/com/android/server/am/BroadcastQueue.java +++ b/services/core/java/com/android/server/am/BroadcastQueue.java @@ -77,6 +77,18 @@ public abstract class BroadcastQueue { } } + static void checkState(boolean expression, @NonNull String msg) { + if (!expression) { + throw new IllegalStateException(msg); + } + } + + static void checkStateWtf(boolean expression, @NonNull String msg) { + if (!expression) { + Slog.wtf(TAG, new IllegalStateException(msg)); + } + } + static int traceBegin(@NonNull String methodName) { final int cookie = methodName.hashCode(); Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, diff --git a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java index af2a97e626171..df1f0fd94526f 100644 --- a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java +++ b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java @@ -25,7 +25,6 @@ import static com.android.internal.util.FrameworkStatsLog.BROADCAST_DELIVERY_EVE import static com.android.internal.util.FrameworkStatsLog.BROADCAST_DELIVERY_EVENT_REPORTED__PROC_START_TYPE__PROCESS_START_TYPE_WARM; import static com.android.internal.util.FrameworkStatsLog.BROADCAST_DELIVERY_EVENT_REPORTED__RECEIVER_TYPE__MANIFEST; import static com.android.internal.util.FrameworkStatsLog.BROADCAST_DELIVERY_EVENT_REPORTED__RECEIVER_TYPE__RUNTIME; -import static com.android.internal.util.Preconditions.checkState; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BROADCAST; import static com.android.server.am.BroadcastProcessQueue.insertIntoRunnableList; import static com.android.server.am.BroadcastProcessQueue.reasonToString; @@ -757,7 +756,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue { } final Intent receiverIntent = r.getReceiverIntent(receiver); if (receiverIntent == null) { - enqueueFinishReceiver(queue, BroadcastRecord.DELIVERY_SKIPPED, "isInFullBackup"); + enqueueFinishReceiver(queue, BroadcastRecord.DELIVERY_SKIPPED, "getReceiverIntent"); return; } @@ -917,9 +916,12 @@ class BroadcastQueueModernImpl extends BroadcastQueue { private boolean finishReceiverLocked(@NonNull BroadcastProcessQueue queue, @DeliveryState int deliveryState, @NonNull String reason) { - final int cookie = traceBegin("finishReceiver"); - checkState(queue.isActive(), "isActive"); + if (!queue.isActive()) { + logw("Ignoring finish; no active broadcast for " + queue); + return false; + } + final int cookie = traceBegin("finishReceiver"); final ProcessRecord app = queue.app; final BroadcastRecord r = queue.getActive(); final int index = queue.getActiveIndex();