From ec821bed7d37a78527c4abcea00a845f71519768 Mon Sep 17 00:00:00 2001 From: Chilun Date: Fri, 4 Mar 2022 18:43:27 +0800 Subject: [PATCH] Skip transfer splash screen if activity is destroying or destroyed Sometimes an activity may be destroyed prematurely before the splash screen animation begins. We can skip transferring the SplashScreenView to client if the activity is finishing. Also add more logs for future investigation. Bug: 221436171 Bug: 170134300 Test: SplashscreenParametrizedTest atest ActivityRecordTests SplashscreenTests Change-Id: I0b5cdbc3d7ff14ad71139c3c5282a0554c40ea1e --- .../app/servertransaction/ActivityTransactionItem.java | 4 ++-- services/core/java/com/android/server/wm/ActivityRecord.java | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/core/java/android/app/servertransaction/ActivityTransactionItem.java b/core/java/android/app/servertransaction/ActivityTransactionItem.java index 6a6d76d202598..469a9bfe59ef1 100644 --- a/core/java/android/app/servertransaction/ActivityTransactionItem.java +++ b/core/java/android/app/servertransaction/ActivityTransactionItem.java @@ -64,11 +64,11 @@ public abstract class ActivityTransactionItem extends ClientTransactionItem { final ActivityClientRecord r = client.getActivityClient(token); if (r == null) { throw new IllegalArgumentException("Activity client record must not be null to execute " - + "transaction item"); + + "transaction item: " + this); } if (client.getActivity(token) == null) { throw new IllegalArgumentException("Activity must not be null to execute " - + "transaction item"); + + "transaction item: " + this); } return r; } diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 287248f311a86..31ef9e0e258cf 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -2452,7 +2452,8 @@ 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 + || finishing) { if (parcelable != null) { parcelable.clearIfNeeded(); }