diff --git a/core/proto/android/server/activitymanagerservice.proto b/core/proto/android/server/activitymanagerservice.proto
index 17dc4589..2bb8912 100644
--- a/core/proto/android/server/activitymanagerservice.proto
+++ b/core/proto/android/server/activitymanagerservice.proto
@@ -779,6 +779,7 @@
         CHANGE_CACHED = 3;
         CHANGE_UNCACHED = 4;
         CHANGE_CAPABILITY = 5;
+        CHANGE_PROCSTATE = 6;
     }
     repeated Change last_reported_changes = 8;
     optional int32 num_procs = 9;
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index c40f65f..45f06c74 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -15528,7 +15528,7 @@
     @GuardedBy("this")
     final void doStopUidLocked(int uid, final UidRecord uidRec) {
         mServices.stopInBackgroundLocked(uid);
-        enqueueUidChangeLocked(uidRec, uid, UidRecord.CHANGE_IDLE);
+        enqueueUidChangeLocked(uidRec, uid, UidRecord.CHANGE_IDLE | UidRecord.CHANGE_PROCSTATE);
     }
 
     /**
diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java
index 9626bbe..85d3d5d 100644
--- a/services/core/java/com/android/server/am/OomAdjuster.java
+++ b/services/core/java/com/android/server/am/OomAdjuster.java
@@ -1191,7 +1191,7 @@
         }
         for (int i = activeUids.size() - 1; i >= 0; i--) {
             final UidRecord uidRec = activeUids.valueAt(i);
-            int uidChange = UidRecord.CHANGE_PROCSTATE;
+            int uidChange = 0;
             if (uidRec.getCurProcState() != PROCESS_STATE_NONEXISTENT
                     && (uidRec.getSetProcState() != uidRec.getCurProcState()
                     || uidRec.getSetCapability() != uidRec.getCurCapability()
@@ -1219,12 +1219,12 @@
                         }
                     }
                     if (uidRec.isIdle() && !uidRec.isSetIdle()) {
-                        uidChange = UidRecord.CHANGE_IDLE;
+                        uidChange |= UidRecord.CHANGE_IDLE;
                         becameIdle.add(uidRec);
                     }
                 } else {
                     if (uidRec.isIdle()) {
-                        uidChange = UidRecord.CHANGE_ACTIVE;
+                        uidChange |= UidRecord.CHANGE_ACTIVE;
                         EventLogTags.writeAmUidActive(uidRec.getUid());
                         uidRec.setIdle(false);
                     }
@@ -1241,6 +1241,9 @@
                 if (uidRec.getSetCapability() != uidRec.getCurCapability()) {
                     uidChange |= UidRecord.CHANGE_CAPABILITY;
                 }
+                if (uidRec.getSetProcState() != uidRec.getCurProcState()) {
+                    uidChange |= UidRecord.CHANGE_PROCSTATE;
+                }
                 uidRec.setSetProcState(uidRec.getCurProcState());
                 uidRec.setSetCapability(uidRec.getCurCapability());
                 uidRec.setSetAllowListed(uidRec.isCurAllowListed());
diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java
index 253686c..a8612fd 100644
--- a/services/core/java/com/android/server/am/ProcessList.java
+++ b/services/core/java/com/android/server/am/ProcessList.java
@@ -3031,7 +3031,7 @@
                             Slog.i(TAG_UID_OBSERVERS, "No more processes in " + uidRecord);
                         }
                         mService.enqueueUidChangeLocked(uidRecord, -1,
-                                UidRecord.CHANGE_GONE);
+                                UidRecord.CHANGE_GONE | UidRecord.CHANGE_PROCSTATE);
                         EventLogTags.writeAmUidStopped(uid);
                         mActiveUids.remove(uid);
                         mService.mFgsStartTempAllowList.removeUid(record.info.uid);
diff --git a/services/core/java/com/android/server/am/UidObserverController.java b/services/core/java/com/android/server/am/UidObserverController.java
index f6a1841..c3a232a 100644
--- a/services/core/java/com/android/server/am/UidObserverController.java
+++ b/services/core/java/com/android/server/am/UidObserverController.java
@@ -154,6 +154,9 @@
         if ((pendingChange & UidRecord.CHANGE_CAPABILITY) != 0) {
             currentChange |= UidRecord.CHANGE_CAPABILITY;
         }
+        if ((pendingChange & UidRecord.CHANGE_PROCSTATE) != 0) {
+            currentChange |= UidRecord.CHANGE_PROCSTATE;
+        }
         return currentChange;
     }
 
diff --git a/services/core/java/com/android/server/am/UidRecord.java b/services/core/java/com/android/server/am/UidRecord.java
index 6101e26..606e6fc 100644
--- a/services/core/java/com/android/server/am/UidRecord.java
+++ b/services/core/java/com/android/server/am/UidRecord.java
@@ -117,13 +117,16 @@
      */
     final Object networkStateLock = new Object();
 
-    static final int CHANGE_PROCSTATE = 0;
-    static final int CHANGE_GONE = 1<<0;
-    static final int CHANGE_IDLE = 1<<1;
-    static final int CHANGE_ACTIVE = 1<<2;
-    static final int CHANGE_CACHED = 1<<3;
-    static final int CHANGE_UNCACHED = 1<<4;
-    static final int CHANGE_CAPABILITY = 1<<5;
+    /*
+     * Change bitmask flags.
+     */
+    static final int CHANGE_GONE = 1 << 0;
+    static final int CHANGE_IDLE = 1 << 1;
+    static final int CHANGE_ACTIVE = 1 << 2;
+    static final int CHANGE_CACHED = 1 << 3;
+    static final int CHANGE_UNCACHED = 1 << 4;
+    static final int CHANGE_CAPABILITY = 1 << 5;
+    static final int CHANGE_PROCSTATE = 1 << 31;
 
     // Keep the enum lists in sync
     private static int[] ORIG_ENUMS = new int[] {
@@ -133,6 +136,7 @@
             CHANGE_CACHED,
             CHANGE_UNCACHED,
             CHANGE_CAPABILITY,
+            CHANGE_PROCSTATE,
     };
     private static int[] PROTO_ENUMS = new int[] {
             UidRecordProto.CHANGE_GONE,
@@ -141,6 +145,7 @@
             UidRecordProto.CHANGE_CACHED,
             UidRecordProto.CHANGE_UNCACHED,
             UidRecordProto.CHANGE_CAPABILITY,
+            UidRecordProto.CHANGE_PROCSTATE,
     };
 
     // UidObserverController is the only thing that should modify this.
@@ -417,6 +422,12 @@
                 }
                 sb.append("uncached");
             }
+            if ((mLastReportedChange & CHANGE_PROCSTATE) != 0) {
+                if (printed) {
+                    sb.append("|");
+                }
+                sb.append("procstate");
+            }
         }
         sb.append(" procs:");
         sb.append(mNumProcs);
