About android.view.WindowLeaked: Form leak

First, the problem

E/WindowManager: android.view.WindowLeaked: Activity com.jeany.demo.MainActivity has leaked window DecorView@a63f902[] that was originally added here
        at android.view.ViewRootImpl.<init>(ViewRootImpl.java:485)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:346)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:92)
        at android.app.Dialog.show(Dialog.java:330)
        at com.jeany.base.ui.widget.SdkAlertDialog.show(SdkAlertDialog.java:26)
        at com.jeany.sdk.WYSdk.handleBackAction(WYSdk.java:105)
        at com.jeany.view.login.BaseLoginDialog$BackListener.onKey(BaseLoginDialog.java:125)
        at android.app.Dialog.dispatchKeyEvent(Dialog.java:776)
        at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:351)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4714)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4586)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4128)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4181)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4147)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4274)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4155)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4331)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4128)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4181)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4147)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4155)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4128)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4181)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4147)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4307)
        at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4468)
        at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2435)
        at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1998)
        at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1989)
        at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2412)
        at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:325)
        at android.os.Looper.loop(Looper.java:142)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

 

Second, analyze the reasons

  Android Each Activity has a WindowManager Form Manager,

  Similarly, the construction of the dialog box on top of an Activity, PopupWindow also has a corresponding WindowManager Forms Manager.

  Because the dialog box, PopupWindown can not be divorced Activity and there alone,

  So when a Dialog (or PopupWindow) being displayed to finish () the Activity carrying the Dialog (or PopupWindow), it will throw Window Leaked anomaly,

  Because the Dialog (or PopupWindow) of WindowManager who may not have a subsidiary, so it's Forms Manager has been leaked.

 

  android.view.WindowLeaked usually occurs in Activity and Dialog display.

 

  Activity in create a Dialog, if the first close and then close the Activity Dialog is normal,

  If the first close and then close the Activity Dialog will error this android.view.WindowLeaked mistake.

  Analysis: Dialog is based on the Activity created: new ProgressDialog (this); this is the Activity.

  Activtity to finish, it was no attachment Dialog, so will report android.view.WindowLeaked.

 

Third, the solution

  Before closing the (finish) an Activity, to ensure that in the above subsidiary Dialog or PopupWindow been closed (dismiss) a.

 

Fourth, reference documentation

  https://blog.csdn.net/xuan521521/article/details/51878403  

 

Guess you like

Origin www.cnblogs.com/pinweyshg/p/12005973.html