Android:BadTokenException当我想再次显示进度对话框时

Android:BadTokenException当我想再次显示进度对话框时,android,progressdialog,Android,Progressdialog,我有一个我无法解决的问题 在我的活动中,我实例化了一个类,如下所示: MapView MapView=(MapView)findViewById(R.id.MapView) myMap=新地图(mapView,此) 构造函数如下所示 public Map(MapView mapView, Context context) { this.context = context; this.mapView = mapView; } 我想做的是在这个类的过程中显示一个progressDi

我有一个我无法解决的问题

在我的活动中,我实例化了一个类,如下所示:

MapView MapView=(MapView)findViewById(R.id.MapView)
myMap=新地图(mapView,此)

构造函数如下所示

public Map(MapView mapView, Context context) {
    this.context = context;
    this.mapView = mapView;
}
我想做的是在这个类的过程中显示一个progressDialog,所以,在Map中,我得到

private void showPath() {
    progressDialog = ProgressDialog.show(context, "Veuillez patienter", "Calcul de l'itinéraire en cours...", true, false);

    Thread thread = new Thread(this);
    thread.start();
}
当线程结束时,我会

progressDialog.disclose()

这管用!但只有一次。。。如果我点击后退按钮,重新打开我的活动,我会得到一个异常

05-06 23:27:15.941:错误/AndroidRuntime(1247):android.view.WindowManager$BadTokenException:无法添加窗口--android.os令牌。BinderProxy@44ecc8e8无效;您的活动正在运行吗?

我尝试了我找到的所有解决方案,但没有一个有效。。。甚至可以使用扩展AsyncTask的类


感谢您的帮助

正如错误消息所告诉您的,这是因为您试图在“活动”中显示对话框,但“活动”未运行(是否已完成?)。因此,在显示对话框之前,您可能需要确保活动未完成:

public class MyActivity extends Activity {

    public void showDialog(Dialog dialog) {
        if (!isFinishing()) {
            // If activity is not finished, then show this dialog.
            dialog.show();
        }
    }

}

好的,我明白了,但是我怎么做呢?指令
dialog.show()在我的班上,谁不是一个活动…哦,它工作!但我不知道我的方式是否真的很好。。。我在类中创建了一个私有属性,它是一个活动。我在构造函数中设置它,在我的方法中,我按照你告诉我的做:
如果(!isFinishing()){//如果活动没有完成,那么显示这个对话框。dialog.show();}
它好还是不好?如果你的类中保留对活动的引用的对象不是一个长期存在的对象,那就可以这样做了。阅读Android文档中关于避免内存泄漏的更多说明。感谢您的这篇文章,非常有趣。