Merge "[ActivityManager] Skip receiver precisely."

This commit is contained in:
Olawale Ogunwale
2015-03-09 16:30:52 +00:00
committed by Gerrit Code Review

View 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();
}
}