diff options
| author | Craig Mautner <cmautner@google.com> | 2012-08-30 13:33:19 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-08-30 13:33:20 -0700 |
| commit | 8b300ed14f74a28ac7752d33b39bc7ac91bd9b26 (patch) | |
| tree | 2ee6712e1cf58bdac33c864870125dbbfef3f2c0 /core/java/android | |
| parent | 0c9278d3c885d63ade01bf583b2bc43ba327837a (diff) | |
| parent | df2390adc3879b7040425e75e4acc64729612b9c (diff) | |
Merge "Don't die(immediate) if from performTraversals." into jb-mr1-dev
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 725d9b52507c..ffd495e4ca73 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -214,6 +214,9 @@ public final class ViewRootImpl implements ViewParent, boolean mTraversalScheduled; int mTraversalBarrier; boolean mWillDrawSoon; + /** Set to true while in performTraversals for detecting when die(true) is called from internal + * callbacks such as onMeasure, onPreDraw, onDraw and deferring doDie() until later. */ + boolean mIsInTraversal; boolean mFitSystemWindowsRequested; boolean mLayoutRequested; boolean mFirst; @@ -1104,6 +1107,7 @@ public final class ViewRootImpl implements ViewParent, if (host == null || !mAdded) return; + mIsInTraversal = true; mWillDrawSoon = true; boolean windowSizeMayChange = false; boolean newSurface = false; @@ -1842,6 +1846,8 @@ public final class ViewRootImpl implements ViewParent, mPendingTransitions.clear(); } } + + mIsInTraversal = false; } private void performMeasure(int childWidthMeasureSpec, int childHeightMeasureSpec) { @@ -3956,7 +3962,9 @@ public final class ViewRootImpl implements ViewParent, } public void die(boolean immediate) { - if (immediate) { + // Make sure we do execute immediately if we are in the middle of a traversal or the damage + // done by dispatchDetachedFromWindow will cause havoc on return. + if (immediate && !mIsInTraversal) { doDie(); } else { if (!mIsDrawing) { |
