OSDN Git Service

am 14ccc26f: Merge "[ActivityManager] Skip receiver precisely."
authorOlawale Ogunwale <ogunwale@google.com>
Mon, 9 Mar 2015 16:36:31 +0000 (16:36 +0000)
committerAndroid Git Automerger <android-git-automerger@android.com>
Mon, 9 Mar 2015 16:36:31 +0000 (16:36 +0000)
* commit '14ccc26f1ce006963f1a0b7a917404aa6a0e9da1':
  [ActivityManager] Skip receiver precisely.

services/core/java/com/android/server/am/BroadcastQueue.java

index 9b7d0b2..5d969c6 100644 (file)
@@ -294,28 +294,23 @@ public final class BroadcastQueue {
     }
 
     public void skipCurrentReceiverLocked(ProcessRecord app) {
-        boolean reschedule = false;
-        BroadcastRecord r = app.curReceiver;
-        if (r != null && r.queue == this) {
-            // The current broadcast is waiting for this app's receiver
-            // to be finished.  Looks like that's not going to happen, so
-            // let the broadcast continue.
-            logBroadcastReceiverDiscardLocked(r);
-            finishReceiverLocked(r, r.resultCode, r.resultData,
-                    r.resultExtras, r.resultAbort, false);
-            reschedule = true;
+        BroadcastRecord r = null;
+        if (mOrderedBroadcasts.size() > 0) {
+            BroadcastRecord br = mOrderedBroadcasts.get(0);
+            if (br.curApp == app) {
+                r = br;
+            }
         }
-
-        r = mPendingBroadcast;
-        if (r != null && r.curApp == app) {
+        if (r == null && mPendingBroadcast != null && mPendingBroadcast.curApp == app) {
             if (DEBUG_BROADCAST) Slog.v(TAG,
                     "[" + mQueueName + "] skip & discard pending app " + r);
+            r = mPendingBroadcast;
+        }
+
+        if (r != null) {
             logBroadcastReceiverDiscardLocked(r);
             finishReceiverLocked(r, r.resultCode, r.resultData,
                     r.resultExtras, r.resultAbort, false);
-            reschedule = true;
-        }
-        if (reschedule) {
             scheduleBroadcastsLocked();
         }
     }