summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorOlawale Ogunwale <ogunwale@google.com>2015-03-09 16:30:52 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-03-09 16:30:52 +0000
commit14ccc26f1ce006963f1a0b7a917404aa6a0e9da1 (patch)
tree9a6eab66af18318c45264f9d325cfc22e232e9bc /services
parent7a4cb563a29f05658760739d3bc2e70bd6342174 (diff)
parent01eb7fa7f99ebc410ae0bf17ea8fec8e61e694f0 (diff)
downloadframeworks_base-14ccc26f1ce006963f1a0b7a917404aa6a0e9da1.zip
frameworks_base-14ccc26f1ce006963f1a0b7a917404aa6a0e9da1.tar.gz
frameworks_base-14ccc26f1ce006963f1a0b7a917404aa6a0e9da1.tar.bz2
Merge "[ActivityManager] Skip receiver precisely."
Diffstat (limited to 'services')
-rw-r--r--services/core/java/com/android/server/am/BroadcastQueue.java27
1 files changed, 11 insertions, 16 deletions
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index 9b7d0b2..5d969c6 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -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();
}
}