BadTokenException:无法添加窗口 [英] BadTokenException: Unable to add window

查看:148
本文介绍了BadTokenException:无法添加窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有,我收到一个问题一个 BadTokenException 当屏幕超时,然后将用户返回到我的应用程序。我有点击时它打开了一个文本菜单按钮。

I have an issue where I receive a BadTokenException when the screen times out, and then the user returns to my application. I have a button which opens up a ContextMenu when clicked.

它正常工作正常,但当用户可以在屏幕超时,然后返回给应用程序,一个 BadTokenException 被抛出。

It works fine normally, but when the user lets the screen time out, and then returns to the application, a BadTokenException is thrown.

07-01 14:46:42.763: WARN/WindowManager(1105): Attempted to add window with token that is a sub-window: android.os.BinderProxy@44af17c8.  Aborting.
    07-01 14:46:42.771: WARN/System.err(1725):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:459)
    07-01 14:46:42.771: WARN/System.err(1725):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:459)
    07-01 14:46:42.771: WARN/System.err(1725):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:459)
    07-01 14:46:42.771: WARN/System.err(1725):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:459)
    07-01 14:46:42.771: WARN/System.err(1725):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:459)
    07-01 14:46:42.771: WARN/System.err(1725):     at android.view.View.showContextMenu(View.java:2444)
    07-01 14:46:42.771: WARN/System.err(1725):     at com.??.??.ui.cards.ViewActivity$3.onClick(ViewActivity.java:353)
    07-01 14:46:42.771: WARN/System.err(1725):     at android.view.View.performClick(View.java:2408)
    07-01 14:46:42.771: WARN/System.err(1725):     at android.view.View$PerformClick.run(View.java:8816)
    07-01 14:46:42.771: WARN/System.err(1725):     at android.os.Handler.handleCallback(Handler.java:587)
    07-01 14:46:42.771: WARN/System.err(1725):     at android.os.Handler.dispatchMessage(Handler.java:92)
    07-01 14:46:42.771: WARN/System.err(1725):     at android.os.Looper.loop(Looper.java:123)
    07-01 14:46:42.771: WARN/System.err(1725):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    07-01 14:46:42.771: WARN/System.err(1725):     at java.lang.reflect.Method.invokeNative(Native Method)
    07-01 14:46:42.771: WARN/System.err(1725):     at java.lang.reflect.Method.invoke(Method.java:521)
    07-01 14:46:42.771: WARN/System.err(1725):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
    07-01 14:46:42.771: WARN/System.err(1725):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    07-01 14:46:42.771: WARN/System.err(1725):     at dalvik.system.NativeStart.main(Native Method)
    07-01 14:46:43.005: WARN/System.err(1725): android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRoot$W@44757528 is not valid; is your activity running?
    07-01 14:46:43.005: WARN/System.err(1725):     at android.view.ViewRoot.setView(ViewRoot.java:505)
    07-01 14:46:43.005: WARN/System.err(1725):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
    07-01 14:46:43.005: WARN/System.err(1725):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
    07-01 14:46:43.005: WARN/System.err(1725):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
    07-01 14:46:43.005: WARN/System.err(1725):     at android.app.Dialog.show(Dialog.java:241)
    07-01 14:46:43.005: WARN/System.err(1725):     at com.android.internal.view.menu.MenuDialogHelper.show(MenuDialogHelper.java:86)
    07-01 14:46:43.005: WARN/System.err(1725):     at com.android.internal.view.menu.ContextMenuBuilder.show(ContextMenuBuilder.java:88)
    07-01 14:46:43.005: WARN/System.err(1725):     at com.android.internal.policy.impl.PhoneWindow$DecorView.showContextMenuForChild(PhoneWindow.java:1860)
    07-01 14:46:43.005: WARN/System.err(1725):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:459)
    07-01 14:46:43.005: WARN/System.err(1725):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:459)
    07-01 14:46:43.005: WARN/System.err(1725):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:459)
    07-01 14:46:43.005: WARN/System.err(1725):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:459)
    07-01 14:46:43.005: WARN/System.err(1725):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:459)
    07-01 14:46:43.005: WARN/System.err(1725):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:459)

如果我赶异常,按钮从未打开在这种情况下,文本菜单,但网页上的其他控件继续工作。

If I catch the Exception, the button never opens up the contextmenu in this case, but other controls on the page continue to work.

如果我尽量减少与主屏幕上的应用程序,然后返回,具有以下跟踪应用程序崩溃:

If I minimize the application with the home screen, and then return, the application crashes with the following trace:

07-01 15:10:50.439: ERROR/AndroidRuntime(1931): FATAL EXCEPTION: main
07-01 15:10:50.439: ERROR/AndroidRuntime(1931): java.lang.NullPointerException
07-01 15:10:50.439: ERROR/AndroidRuntime(1931):     at android.view.WindowManagerImpl.removeViewLocked(WindowManagerImpl.java:239)
07-01 15:10:50.439: ERROR/AndroidRuntime(1931):     at android.view.WindowManagerImpl.closeAll(WindowManagerImpl.java:293)
07-01 15:10:50.439: ERROR/AndroidRuntime(1931):     at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3687)
07-01 15:10:50.439: ERROR/AndroidRuntime(1931):     at android.app.ActivityThread.access$2900(ActivityThread.java:125)
07-01 15:10:50.439: ERROR/AndroidRuntime(1931):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
07-01 15:10:50.439: ERROR/AndroidRuntime(1931):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-01 15:10:50.439: ERROR/AndroidRuntime(1931):     at android.os.Looper.loop(Looper.java:123)
07-01 15:10:50.439: ERROR/AndroidRuntime(1931):     at android.app.ActivityThread.main(ActivityThread.java:4627)
07-01 15:10:50.439: ERROR/AndroidRuntime(1931):     at java.lang.reflect.Method.invokeNative(Native Method)
07-01 15:10:50.439: ERROR/AndroidRuntime(1931):     at java.lang.reflect.Method.invoke(Method.java:521)
07-01 15:10:50.439: ERROR/AndroidRuntime(1931):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
07-01 15:10:50.439: ERROR/AndroidRuntime(1931):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
07-01 15:10:50.439: ERROR/AndroidRuntime(1931):     at dalvik.system.NativeStart.main(Native Method)

以下是我添加了文本菜单:

Here's how I'm adding the ContextMenu:

b.setOnClickListener( new OnClickListener() {
            @Override
            public void onClick( View view ) {
                if (contextMenuOpen) return;// popup options
                contextMenuOpen = view.showContextMenu();

            }

我不叫registerForContextMenu的按钮,而是主视图本身。这是不正确的?

I do not call registerForContextMenu with the button, but rather the main view itself. Is this incorrect?

推荐答案

您持有到一个引用一个Context(显式,或创建一个对话框或吐司或其他相关项目)已被销毁(通常因为你使用的是 onCreateDialog 或你传递活动的一些其他的过程中,当活动被破坏未得到破坏)。

You are holding on to a reference to a Context (either explicitly, or by creating a Dialog or Toast or some other dependent item) that has been destroyed (typically because you are using the onCreateDialog or you passed the Activity to some other process that didn't get destroyed when the Activity was destroyed).

这篇关于BadTokenException:无法添加窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆