From 4b91fbf9426254547136cd51b7070deb745d824f Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Tue, 14 Jun 2022 15:53:51 +0800 Subject: [PATCH] Make sure the relayoutWindow is called when Activity restarted The host visibility was always invisible while making an Activity window active because the host visibility was updated afterward (in ActivityThread#handleStartActivity). Therefore, #relayoutWindow could be skipped and not recreating Surface if the view visibility is not changed since last traversal. Bug: 226324982 Test: repro steps on the bug Change-Id: Id677a375bc2f75b055a9d35c8b8488e97c24eae9 --- core/java/android/view/ViewRootImpl.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index f163530f997bb..97e0692a3f3cd 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -2019,13 +2019,10 @@ public final class ViewRootImpl implements ViewParent, renderer.setStopped(mStopped); } if (!mStopped) { - // Unnecessary to traverse if the window is not yet visible. - if (getHostVisibility() == View.VISIBLE) { - // Make sure that relayoutWindow will be called to get valid surface because - // the previous surface may have been released. - mAppVisibilityChanged = true; - scheduleTraversals(); - } + // Make sure that relayoutWindow will be called to get valid surface because + // the previous surface may have been released. + mAppVisibilityChanged = true; + scheduleTraversals(); } else { if (renderer != null) { renderer.destroyHardwareResources(mView);