Skip to content

Commit 8b300ed

Browse files
Craig MautnerAndroid (Google) Code Review
authored andcommitted
Merge "Don't die(immediate) if from performTraversals." into jb-mr1-dev
2 parents 0c9278d + df2390a commit 8b300ed

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

core/java/android/view/ViewRootImpl.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,9 @@ public final class ViewRootImpl implements ViewParent,
214214
boolean mTraversalScheduled;
215215
int mTraversalBarrier;
216216
boolean mWillDrawSoon;
217+
/** Set to true while in performTraversals for detecting when die(true) is called from internal
218+
* callbacks such as onMeasure, onPreDraw, onDraw and deferring doDie() until later. */
219+
boolean mIsInTraversal;
217220
boolean mFitSystemWindowsRequested;
218221
boolean mLayoutRequested;
219222
boolean mFirst;
@@ -1104,6 +1107,7 @@ private void performTraversals() {
11041107
if (host == null || !mAdded)
11051108
return;
11061109

1110+
mIsInTraversal = true;
11071111
mWillDrawSoon = true;
11081112
boolean windowSizeMayChange = false;
11091113
boolean newSurface = false;
@@ -1842,6 +1846,8 @@ private void performTraversals() {
18421846
mPendingTransitions.clear();
18431847
}
18441848
}
1849+
1850+
mIsInTraversal = false;
18451851
}
18461852

18471853
private void performMeasure(int childWidthMeasureSpec, int childHeightMeasureSpec) {
@@ -3956,7 +3962,9 @@ private static void getGfxInfo(View view, int[] info) {
39563962
}
39573963

39583964
public void die(boolean immediate) {
3959-
if (immediate) {
3965+
// Make sure we do execute immediately if we are in the middle of a traversal or the damage
3966+
// done by dispatchDetachedFromWindow will cause havoc on return.
3967+
if (immediate && !mIsInTraversal) {
39603968
doDie();
39613969
} else {
39623970
if (!mIsDrawing) {

0 commit comments

Comments
 (0)