我有,我收到一个问题一个 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).
相关推荐
最新文章