diff --git a/litho-core/src/main/java/com/facebook/litho/ComponentTree.java b/litho-core/src/main/java/com/facebook/litho/ComponentTree.java index 4172dd89a4b..49b25938264 100644 --- a/litho-core/src/main/java/com/facebook/litho/ComponentTree.java +++ b/litho-core/src/main/java/com/facebook/litho/ComponentTree.java @@ -853,10 +853,19 @@ private void promoteCommittedLayoutStateToUI() { if (mCommittedLayoutState == null) { throw new RuntimeException("Cannot promote null LayoutState!"); } + if (mCommittedLayoutState == mMainThreadLayoutState) { return; } + + final @Nullable LayoutState previousMainThreadLayoutState = mMainThreadLayoutState; mMainThreadLayoutState = mCommittedLayoutState; + + if (LayoutState.isNullOrEmpty(previousMainThreadLayoutState) + && LayoutState.isNullOrEmpty(mCommittedLayoutState)) { + return; + } + dispatchOnAttached(); if (mLithoView != null) { diff --git a/litho-core/src/main/java/com/facebook/litho/LayoutState.java b/litho-core/src/main/java/com/facebook/litho/LayoutState.java index 381b7cf9435..bb6c21ac17c 100644 --- a/litho-core/src/main/java/com/facebook/litho/LayoutState.java +++ b/litho-core/src/main/java/com/facebook/litho/LayoutState.java @@ -242,6 +242,10 @@ boolean hasComponentsExcludedFromIncrementalMount() { return mHasComponentsExcludedFromIncrementalMount; } + public boolean isEmpty() { + return mResolveResult.component instanceof EmptyComponent; + } + public RenderTree toRenderTree() { if (mCachedRenderTree != null) { return mCachedRenderTree; @@ -737,4 +741,8 @@ public VisibilityBoundsTransformer getVisibilityBoundsTransformer() { public Map getDynamicValueOutputs() { return mDynamicValueOutputs; } + + public static boolean isNullOrEmpty(@Nullable LayoutState layoutState) { + return layoutState == null || layoutState.isEmpty(); + } }