Freezer: fix delayed freezing operation
AMS will compute and apply OomAdj frequently, updating the value
again and again. That makes freezer fall into a loop, removing and
resetting delayed freezing messages. Fix it by dropping those
redundant messages.
Bug: 188189336
Bug: 181278288
Test: Verified apps are frozen 10 min after they become cached.
Change-Id: I83aac961b00db129e0d84f1f4f485012c8aa90d4
diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java
index 709139e..4629d0b 100644
--- a/services/core/java/com/android/server/am/CachedAppOptimizer.java
+++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java
@@ -881,7 +881,10 @@
@GuardedBy({"mAm", "mProcLock"})
void freezeAppAsyncLSP(ProcessRecord app) {
- mFreezeHandler.removeMessages(SET_FROZEN_PROCESS_MSG, app);
+ if (mFreezeHandler.hasMessages(SET_FROZEN_PROCESS_MSG, app)) {
+ // Skip redundant DO_FREEZE message
+ return;
+ }
mFreezeHandler.sendMessageDelayed(
mFreezeHandler.obtainMessage(