Fix extra onStop when finishing after onCreate

Sometimes onStop was called after finishing activity in onCreate.
This is unexpected, as in this case the state should transition
directly to onDestroy. One possible cause is getting a window
visibility change to visible state before request for destruction
from server. Such window visibility change would not trigger any
callbacks on its own, but could set the state of client record to
ON_START. Then when the following destruction request comes, it
causes the activity to stop by looking at its previous "started"
state.

This CL does not allow transitioning to started state while doing
window visibility update if activity wasn't stopped before.

Bug: 127106719
Test: ActivityThreadTest
Change-Id: I0239e02e4cdb335e2fbbc3b8817278e40bbcea1c
This commit is contained in:
Andrii Kulian
2019-03-21 19:01:57 -07:00
parent dd07ae579c
commit 49dc798e43

View File

@@ -4521,7 +4521,7 @@ public final class ActivityThread extends ClientTransactionHandler {
if (!show && !r.stopped) {
performStopActivityInner(r, null /* stopInfo */, show, false /* saveState */,
false /* finalStateRequest */, "handleWindowVisibility");
} else if (show && r.stopped) {
} else if (show && r.getLifecycleState() == ON_STOP) {
// If we are getting ready to gc after going to the background, well
// we are back active so skip it.
unscheduleGcIdler();