Attempt to recover from apps destroying their window at draw time

Bug #6436642

Change-Id: I906b9c68225683f97b9c97c153a1132cf9ac6509
This commit is contained in:
Romain Guy
2012-05-06 14:11:16 -07:00
parent ab4c4f4ff7
commit 1f59e5c19b

View File

@@ -230,6 +230,7 @@ public final class ViewRootImpl implements ViewParent,
boolean mHasHadWindowFocus;
boolean mLastWasImTarget;
boolean mWindowsAnimating;
boolean mIsDrawing;
int mLastSystemUiVisibility;
// Pool of queued input events.
@@ -2037,10 +2038,12 @@ public final class ViewRootImpl implements ViewParent,
final boolean fullRedrawNeeded = mFullRedrawNeeded;
mFullRedrawNeeded = false;
mIsDrawing = true;
Trace.traceBegin(Trace.TRACE_TAG_VIEW, "draw");
try {
draw(fullRedrawNeeded);
} finally {
mIsDrawing = false;
Trace.traceEnd(Trace.TRACE_TAG_VIEW);
}
@@ -3962,7 +3965,12 @@ public final class ViewRootImpl implements ViewParent,
if (immediate) {
doDie();
} else {
destroyHardwareRenderer();
if (!mIsDrawing) {
destroyHardwareRenderer();
} else {
Log.e(TAG, "Attempting to destroy the window while drawing!\n" +
" window=" + this + ", title=" + mWindowAttributes.getTitle());
}
mHandler.sendEmptyMessage(MSG_DIE);
}
}