我刚刚将我的第一个应用程序发布到 Google Marketplace 并收到信息,应用程序崩溃了 - 我有两个堆栈跟踪,其中一个例如:
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@45681318 is not valid; is your activity running?
at android.view.ViewRoot.setView(ViewRoot.java:468)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
at android.view.Window$LocalWindowManager.addView(Window.java:424)
at android.app.Dialog.show(Dialog.java:239)
at abc.de.f.MyTask.onPreExecute(MyTask.java:52)
只有一种可能性可以访问 MyTask 中的 onPreExecute() 方法 - 它不会在模拟器或我的物理设备上崩溃。但它似乎有时会“在野外”崩溃。
要找到原因,您的第一步是什么?
非常感谢,
斯特凡
编辑:
@Override
protected void onPreExecute() {
this.dialog.setMessage(((Activity) listener).getString(R.string.daten_werden_geladen));
this.dialog.show();
}
this.dialog.setMessage 有效,但 show() 无效...:(
最佳答案
看起来您正在更新 UI 或使用已关闭 Activity 的上下文从 onPreExecute() 显示对话框。我猜你的任务执行中存在逻辑错误。在使用上下文更新 UI 之前,您应该检查 Activity 是否正在运行,或者您是否持有对 Activity View 的引用。
编辑: 不要使用 Activity 的上下文来获取字符串资源,而是尝试使用应用程序的上下文。
this.dialog.setMessage(((Activity) listener).getApplicationContext().getString(R.string.daten_werden_geladen));
关于Android:有时/在某些设备上只有两个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4367987/