Loading services/core/java/com/android/server/wm/ActivityTaskManagerService.java +11 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading @@ -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 Loading services/core/java/com/android/server/wm/WindowProcessController.java +8 −2 Original line number Diff line number Diff line Loading @@ -402,12 +402,18 @@ 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) { // 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) { return true; Loading Loading
services/core/java/com/android/server/wm/ActivityTaskManagerService.java +11 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading @@ -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 Loading
services/core/java/com/android/server/wm/WindowProcessController.java +8 −2 Original line number Diff line number Diff line Loading @@ -402,12 +402,18 @@ 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) { // 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) { return true; Loading