Fix issue #1930911: Crash in system process
Ensure that we do all the work for removing a window's view
hierarchy in that window's thread.
Change-Id: Ib7c1701aee6b541b75fd1a680f6987f959f2ba88
diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java
index 398abf8..dba2e04 100644
--- a/core/java/android/view/ViewRoot.java
+++ b/core/java/android/view/ViewRoot.java
@@ -1841,7 +1841,7 @@
}
} break;
case DIE:
- dispatchDetachedFromWindow();
+ doDie();
break;
case DISPATCH_KEY_FROM_IME: {
if (LOCAL_LOGV) Log.v(
@@ -2520,6 +2520,14 @@
}
public void die(boolean immediate) {
+ if (immediate) {
+ doDie();
+ } else {
+ sendEmptyMessage(DIE);
+ }
+ }
+
+ void doDie() {
checkThread();
if (Config.LOGV) Log.v("ViewRoot", "DIE in " + this + " of " + mSurface);
synchronized (this) {
@@ -2543,11 +2551,7 @@
}
if (mAdded) {
mAdded = false;
- if (immediate) {
- dispatchDetachedFromWindow();
- } else if (mView != null) {
- sendEmptyMessage(DIE);
- }
+ dispatchDetachedFromWindow();
}
}
}