Complete doDie() before executing addView().
If WindowManager.addView() is called soon after WindowManager.removeView() then the MSG_DIE in the ViewRootImpl mHandler queue may not have had time to execute. This will cause WindowManagerGlobal to throw an exception since the DecorView is being added before it has been removed. This fix detects that situation by saving all Views that are queued up for ViewRootImpl.doDie(). If addView() is called for one of these Views then doDie() is called immediately and not called when MSG_DIE eventually makes its way through the queue. This change also makes doDie() non-reentrant by only allowing it to carry out its functions the first time it is called. This keeps dispatchDetachedWindows() from causing destruction by recursively calling back into doDie(). This is usually caused by calling dismissDialog() from within dispatchDetachedWindow(). Fixes bug 9404689. Fixes bug 9406261. Change-Id: Id4fc8054e273215d82366428fef51b9ba98385fe
Loading
Please register or sign in to comment