Attempt to recover from apps destroying their window at draw time
Bug #6436642 Change-Id: I906b9c68225683f97b9c97c153a1132cf9ac6509
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user