Allow to transfer starting window from dying activity

If a launching activity with starting window is died and there
is an activity in the same task, the starting window may be
removed before the next activity is drawn. The symptom will be
obvious if the next activity is slow to draw (black screen).

Another symptom is that if the launching activity requested
different orientation from the display, its rotation transform
will be canceled when removing the activity. That causes the
starting window shows in previous orientation temporally.

Bug: 191429072
Test: Start a new activity on a standalone process into an
      existing task. The activity calls finish and kills
      itself in onCreate.
Change-Id: Icc687854f9885389aa436b617c4bcb231a74c42c
This commit is contained in:
Riddle Hsu
2021-07-30 22:08:46 +08:00
parent 23ba83b769
commit 56966cba35

View File

@@ -3633,6 +3633,16 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
cleanUp(true /* cleanServices */, true /* setState */);
if (remove) {
if (mStartingData != null && mVisible && task != null) {
// A corner case that the app terminates its trampoline activity on a separated
// process by killing itself. Transfer the starting window to the next activity
// which will be visible, so the dead activity can be removed immediately (no
// longer animating) and the reveal animation can play normally on next activity.
final ActivityRecord top = task.topRunningActivity();
if (top != null && !top.mVisible && top.shouldBeVisible()) {
top.transferStartingWindow(this);
}
}
removeFromHistory("appDied");
}
}