summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Wei Sheng Shih <wilsonshih@google.com> 2022-08-02 12:24:36 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2022-08-02 12:24:36 +0000
commitdfbbf2017c2f87794d2ff42bf15c6a89d00b8a35 (patch)
treedf95145ed69c2a1c203b00e2ddd1893399d64dab
parentc2d5e6b2b4b698f4c3166548cf11f0ca102f227b (diff)
parenta01a7fecc3bcdd5072cbe10cf5ef6b6ca0b70389 (diff)
Merge "Fix launch app crash could stuck system ui render thread." into tm-qpr-dev am: 01276d685c am: a01a7fecc3
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19084696 Change-Id: I60a71fad72b565c9d0ad95568cd2b10dfdbf0dd0 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java2
-rw-r--r--services/core/java/com/android/server/wm/TaskOrganizerController.java21
2 files changed, 15 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 2b3a68518c89..18faf7941b8f 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -2611,7 +2611,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
// either way, abort and reset the sequence.
if (parcelable == null
|| mTransferringSplashScreenState != TRANSFER_SPLASH_SCREEN_COPYING
- || mStartingWindow == null
+ || mStartingWindow == null || mStartingWindow.mRemoved
|| finishing) {
if (parcelable != null) {
parcelable.clearIfNeeded();
diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java
index 8b71a348108a..0a2e877d0f46 100644
--- a/services/core/java/com/android/server/wm/TaskOrganizerController.java
+++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java
@@ -632,6 +632,11 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
final Rect mainFrame = window.getRelativeFrame();
final StartingWindowAnimationAdaptor adaptor = new StartingWindowAnimationAdaptor();
window.startAnimation(t, adaptor, false, ANIMATION_TYPE_STARTING_REVEAL);
+ if (adaptor.mAnimationLeash == null) {
+ Slog.e(TAG, "Cannot start starting window animation, the window " + window
+ + " was removed");
+ return null;
+ }
t.setPosition(adaptor.mAnimationLeash, mainFrame.left, mainFrame.top);
return adaptor.mAnimationLeash;
}
@@ -679,13 +684,15 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
if (topActivity != null) {
removalInfo.deferRemoveForIme = topActivity.mDisplayContent
.mayImeShowOnLaunchingActivity(topActivity);
- if (removalInfo.playRevealAnimation && playShiftUpAnimation) {
- final WindowState mainWindow =
- topActivity.findMainWindow(false/* includeStartingApp */);
- if (mainWindow != null) {
- removalInfo.windowAnimationLeash = applyStartingWindowAnimation(mainWindow);
- removalInfo.mainFrame = mainWindow.getRelativeFrame();
- }
+ final WindowState mainWindow =
+ topActivity.findMainWindow(false/* includeStartingApp */);
+ // No app window for this activity, app might be crashed.
+ // Remove starting window immediately without playing reveal animation.
+ if (mainWindow == null || mainWindow.mRemoved) {
+ removalInfo.playRevealAnimation = false;
+ } else if (removalInfo.playRevealAnimation && playShiftUpAnimation) {
+ removalInfo.windowAnimationLeash = applyStartingWindowAnimation(mainWindow);
+ removalInfo.mainFrame = mainWindow.getRelativeFrame();
}
}
try {