Don't "notifyAppStopping" when going to sleep.

The WindowManager interprets notifyAppStopping as a signal that the
app surface will be destroyed, but in the visible stopped states
of going to sleep this may not necessarily be true. notifyAppStopping
was only recently introduced for the purposes of handling detach children
which isn't needed when turning the screen off. Simply not executing
it when turning the screen off should be safe, if a little confusing.

Test: Manual of bug + mess around with SV apps a bunch
Bug: 80491358
Bug: 72921025
Change-Id: I7dd5d1e144e12ecfba038e15f84f9ae7c02aadd2
This commit is contained in:
Robert Carr
2018-05-31 15:39:07 -07:00
parent 1031bf5f76
commit 9e1bf7c7cc

View File

@@ -1405,6 +1405,11 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
newIntents.add(intent);
}
final boolean isSleeping() {
final ActivityStack stack = getStack();
return stack != null ? stack.shouldSleepActivities() : service.isSleepingLocked();
}
/**
* Deliver a new Intent to an existing activity, so that its onNewIntent()
* method will be called at the proper time.
@@ -1415,9 +1420,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
intent, getUriPermissionsLocked(), userId);
final ReferrerIntent rintent = new ReferrerIntent(intent, referrer);
boolean unsent = true;
final ActivityStack stack = getStack();
final boolean isTopActivityWhileSleeping = isTopRunningActivity()
&& (stack != null ? stack.shouldSleepActivities() : service.isSleepingLocked());
final boolean isTopActivityWhileSleeping = isTopRunningActivity() && isSleeping();
// We want to immediately deliver the intent to the activity if:
// - It is currently resumed or paused. i.e. it is currently visible to the user and we want
@@ -1645,7 +1648,10 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
parent.onActivityStateChanged(this, state, reason);
}
if (state == STOPPING) {
// The WindowManager interprets the app stopping signal as
// an indication that the Surface will eventually be destroyed.
// This however isn't necessarily true if we are going to sleep.
if (state == STOPPING && !isSleeping()) {
mWindowContainerController.notifyAppStopping();
}
}