Introduce a grace period for bg activity starts
We allow processes that either had an activity started in them
recently, or recently finished an activity while they were
participating in a visible task to start activities from background
within 10 seconds.
Bug: 132333960
Test: atest WmTests:ActivityStarterTests
Test: atest CtsWindowManagerDeviceTestCases:ActivityStarterTests
Test: atest BackgroundActivityLaunchTest
Test: manual with bugs on b/hotlistid:1573032
Change-Id: Ica2c1abecf881ff9bb0959f17456d816350e4e96
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 772e5e6..765c9d0 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -311,6 +311,9 @@
public static final int KEY_DISPATCHING_TIMEOUT_MS = 5 * 1000;
// How long we wait until we timeout on key dispatching during instrumentation.
static final int INSTRUMENTATION_KEY_DISPATCHING_TIMEOUT_MS = 60 * 1000;
+ // How long we permit background activity starts after an activity in the process
+ // started or finished.
+ static final long ACTIVITY_BG_START_GRACE_PERIOD_MS = 10 * 1000;
/** Used to indicate that an app transition should be animated. */
static final boolean ANIMATE = true;
@@ -1575,6 +1578,13 @@
}
}
}
+
+ // note down that the process has finished an activity and is in background activity
+ // starts grace period
+ if (r.app != null) {
+ r.app.setLastActivityFinishTimeIfNeeded(SystemClock.uptimeMillis());
+ }
+
final long origId = Binder.clearCallingIdentity();
try {
boolean res;