无法理解这个堆栈跟踪

时间:2012-03-14 19:13:53

标签: android

我有一个已发布的应用程序,并从崩溃中收到了堆栈跟踪:

android.view.WindowManager$BadTokenException: Unable to add window -- token   
 android.os.BinderProxy@4051d698 is not valid; is your activity running?
at android.view.ViewRoot.setView(ViewRoot.java:535)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:203)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:117)
at android.view.Window$LocalWindowManager.addView(Window.java:424)
at android.app.Dialog.show(Dialog.java:241)
at android.app.ProgressDialog.show(ProgressDialog.java:107)
at android.app.ProgressDialog.show(ProgressDialog.java:90)
at com.mytaxicontrol.MyTaxiControlActivity$executeGEO.void onPreExecute()(Unknown Source)
at android.os.AsyncTask.execute(AsyncTask.java:391)
at com.mytaxicontrol.MyTaxiControlActivity$37.void run()(Unknown Source)
at android.app.Activity.runOnUiThread(Activity.java:3743)
at com.mytaxicontrol.MyTaxiControlActivity.void geo()(Unknown Source)

看起来无法显示进度对话框。这是相关的代码:

public void onPreExecute() {
        if(isGeoRunning)return; 

        if (loading == null || !loading.isShowing())
            loading = ProgressDialog.show(co, "",
                    "Retrieving Geolocation...", true);
    }

请注意,co = this并已在onCreate()中初始化 我的问题是什么?

2 个答案:

答案 0 :(得分:1)

这可能是用户在 Asynctask 完成之前“返回”的时候。

答案 1 :(得分:0)

  

android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌
   android.os.BinderProxy@4051d698无效;你的活动在运行吗?

您的应用可能刚刚重新创建,因为屏幕旋转或用户按下主页/后退或类似的事情发生。所以你的应用程序实际上没有运行。

让UI + AsyncTasks不会破坏活动生命周期但有一些选择,这有点棘手。

例如为: http://groups.google.com/group/android-developers/browse_thread/thread/e1d5b8f8a3142892

基本上,您需要确保在没有UI的情况下AsyncTask不会触摸UI。