Android:有时/某些设备上只有两个错误

swa*_*ner 4 crash android

我刚刚将我的第一个应用程序发布到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)
Run Code Online (Sandbox Code Playgroud)

在MyTask中只有一种方法可以获得onPreExecute()方法 - 并且它不会在模拟器或我的物理设备上崩溃.但它似乎有时会"在野外"崩溃.

你的第一步是什么才能找到原因?

非常感谢,

斯特凡

编辑:

@Override
protected void onPreExecute() {
  this.dialog.setMessage(((Activity) listener).getString(R.string.daten_werden_geladen));
  this.dialog.show();
}
Run Code Online (Sandbox Code Playgroud)

this.dialog.setMessage工作,但show()不... :(

Var*_*run 5

看起来您正在使用已关闭的活动的上下文更新UI或从onPreExecute()显示对话框.我想你的任务实现中存在逻辑错误.在使用上下文更新UI之前或者您正在从活动中保存对视图的引用之前,U应检查活动是否正在运行.

编辑:尝试使用您的应用程序的上下文,而不是使用Activity的上下文来获取字符串资源.

this.dialog.setMessage(((Activity) listener).getApplicationContext().getString(R.string.daten_werden_geladen));
Run Code Online (Sandbox Code Playgroud)

  • varun是完全正确的...在你的onPreExecute运行之前你的Activity已经消失了,并且你在你的asnctask中持有一个对死活动的引用.尝试在asynctask开始的时候改变电话的方向,我打赌你能够以这种方式重新调整它. (2认同)