diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java index f1c591522e519..0877dd96c19fc 100644 --- a/services/core/java/com/android/server/am/BroadcastQueue.java +++ b/services/core/java/com/android/server/am/BroadcastQueue.java @@ -798,7 +798,10 @@ public final class BroadcastQueue { mService.updateOomAdjPendingTargetsLocked( OomAdjuster.OOM_ADJ_REASON_START_RECEIVER); } + } else if (filter.receiverList.app != null) { + mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(filter.receiverList.app); } + try { if (DEBUG_BROADCAST_LIGHT) Slog.i(TAG_BROADCAST, "Delivering to " + filter + " : " + r); @@ -1132,6 +1135,10 @@ public final class BroadcastQueue { } } if (sendResult) { + if (r.callerApp != null) { + mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily( + r.callerApp); + } try { if (DEBUG_BROADCAST) { Slog.i(TAG_BROADCAST, "Finishing broadcast [" + mQueueName + "] " diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java index cd0d5b47c2381..36d4a38c1624f 100644 --- a/services/core/java/com/android/server/am/CachedAppOptimizer.java +++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java @@ -720,6 +720,16 @@ public final class CachedAppOptimizer { } } + // This will ensure app will be out of the freezer for at least FREEZE_TIMEOUT_MS + void unfreezeTemporarily(ProcessRecord app) { + synchronized (mAm) { + if (app.frozen) { + unfreezeAppLocked(app); + freezeAppAsync(app); + } + } + } + @GuardedBy("mAm") void freezeAppAsync(ProcessRecord app) { mFreezeHandler.removeMessages(SET_FROZEN_PROCESS_MSG, app);