Merge "Do not allow app to start background activity after stop app switches triggered" into qt-dev

This commit is contained in:
Alan Stokes
2019-06-04 07:46:52 +00:00
committed by Android (Google) Code Review
2 changed files with 19 additions and 2 deletions

View File

@@ -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

View File

@@ -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) {