无法添加窗口令牌android.os.BinderProxy@4250d6d8无效;您的活动是否正在运行?

9

昨天有一位用户给我发送了这份崩溃报告:

 android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@4250d6d8 is not valid; is your activity running?
    at android.view.ViewRootImpl.setView(ViewRootImpl.java:698)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:326)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
    at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
    at android.view.Window$LocalWindowManager.addView(Window.java:552)
    at android.app.Dialog.show(Dialog.java:277)
    at android.app.AlertDialog$Builder.show(AlertDialog.java:932)
    at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:833)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4867)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
    at dalvik.system.NativeStart.main(Native Method)

我搜索了一下,有人说解决方法是将this改为Activity.this。但即使我使用以下代码,这个解决方法也没有起作用:

//Oncreate Method.....

     button.setOnClickListener(new OnClickListener(){

                        @Override
                        public void onClick(View v) {

         AlertDialog.Builder alertd = new AlertDialog.Builder(MainActivity.this);

         alertd.setMessage("StackOverflow");

         alertd.setTitle("Example");

         AlertDialog alertd2 = alertd.create();

         alertd2.show();
        }

                      });

我需要改变一些什么吗?


你在哪里运行这个程序?展示更多的代码。 - Simas
添加完整的onCreate方法,同时也包括类。 - Simas
如果可能,请添加完整的活动代码。将以下与编程相关的内容从英语翻译成中文。 - Ajit Pratap Singh
Activity与AlertDialog没有任何关系。 - Device
点击按钮。然后在警告出现之前,快速按两次设备的返回按钮。这将导致此错误。实际上,我还不知道确切的解决方案。 - Burhan ARAS
1个回答

16

最终,我找到了解决方案。问题在于,即使您的活动已经结束,您的警报尝试显示。

因此,您应该在显示警报之前检查活动是否正在结束。为此,在 Activity 类中定义了 isFinishing() 方法。

以下是您应该执行的操作:

 if(!isFinishing())
 {
     alert.show();
 }

玩得开心。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接