diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java index 85c601fe0a5c7..dbd9e4b8ea68a 100644 --- a/services/core/java/com/android/server/wm/WindowProcessController.java +++ b/services/core/java/com/android/server/wm/WindowProcessController.java @@ -107,6 +107,12 @@ public class WindowProcessController extends ConfigurationContainer 0; } - void setLastActivityLaunchTime(long launchTime) { + void setLastActivityLaunchTime(ActivityRecord r) { + long launchTime = r.lastLaunchTime; if (launchTime <= mLastActivityLaunchTime) { if (launchTime < mLastActivityLaunchTime) { Slog.w(TAG, @@ -547,9 +554,29 @@ public class WindowProcessController extends ConfigurationContainer= RESET_RAPID_ACTIVITY_LAUNCH_MS) { + mRapidActivityLaunchCount = 0; + } + + if (mRapidActivityLaunchCount > MAX_RAPID_ACTIVITY_LAUNCH_COUNT) { + Slog.w(TAG, "Killing " + mPid + " because of rapid activity launch"); + r.getRootTask().moveTaskToBack(r.getTask()); + mAtm.mH.post(() -> mAtm.mAmInternal.killProcess(mName, mUid, "rapidActivityLaunch")); + } + } + void setLastActivityFinishTimeIfNeeded(long finishTime) { if (finishTime <= mLastActivityFinishTime || !hasActivityInVisibleTask()) { return; @@ -696,7 +723,7 @@ public class WindowProcessController extends ConfigurationContainer