Merge "Do not allow app to start background activity after stop app switches triggered" into qt-dev
This commit is contained in:
@@ -509,6 +509,12 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
||||
*/
|
||||
private boolean mDidAppSwitch;
|
||||
|
||||
/**
|
||||
* Last stop app switches time, apps finished before this time cannot start background activity
|
||||
* even if they are in grace period.
|
||||
*/
|
||||
private long mLastStopAppSwitchesTime;
|
||||
|
||||
IActivityController mController = null;
|
||||
boolean mControllerIsAMonkey = false;
|
||||
|
||||
@@ -4749,6 +4755,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
||||
enforceCallerIsRecentsOrHasPermission(STOP_APP_SWITCHES, "stopAppSwitches");
|
||||
synchronized (mGlobalLock) {
|
||||
mAppSwitchesAllowedTime = SystemClock.uptimeMillis() + APP_SWITCH_DELAY_TIME;
|
||||
mLastStopAppSwitchesTime = SystemClock.uptimeMillis();
|
||||
mDidAppSwitch = false;
|
||||
getActivityStartController().schedulePendingActivityLaunches(APP_SWITCH_DELAY_TIME);
|
||||
}
|
||||
@@ -4765,6 +4772,10 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
long getLastStopAppSwitchesTime() {
|
||||
return mLastStopAppSwitchesTime;
|
||||
}
|
||||
|
||||
void onStartActivitySetDidAppSwitch() {
|
||||
if (mDidAppSwitch) {
|
||||
// This is the second allowed switch since we stopped switches, so now just generally
|
||||
|
||||
@@ -402,11 +402,17 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
|
||||
if (mAllowBackgroundActivityStarts) {
|
||||
return true;
|
||||
}
|
||||
// allow if any activity in the caller has either started or finished very recently
|
||||
// allow if any activity in the caller has either started or finished very recently, and
|
||||
// it must be started or finished after last stop app switches time.
|
||||
final long now = SystemClock.uptimeMillis();
|
||||
if (now - mLastActivityLaunchTime < ACTIVITY_BG_START_GRACE_PERIOD_MS
|
||||
|| now - mLastActivityFinishTime < ACTIVITY_BG_START_GRACE_PERIOD_MS) {
|
||||
return true;
|
||||
// if activity is started and finished before stop app switch time, we should not
|
||||
// let app to be able to start background activity even it's in grace period.
|
||||
if (mLastActivityLaunchTime > mAtm.getLastStopAppSwitchesTime()
|
||||
|| mLastActivityFinishTime > mAtm.getLastStopAppSwitchesTime()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// allow if the proc is instrumenting with background activity starts privs
|
||||
if (mInstrumentingWithBackgroundActivityStartPrivileges) {
|
||||
|
||||
Reference in New Issue
Block a user