我有Progress Dialog Class,它是singleton
public class ProgressDialogManager {
private static ProgressDialogManager manager = null;
private Context context;
private ProgressDialog pDialog = null;
private ProgressDialogManager(Context context) {
this.context = context;
}
public static ProgressDialogManager getInstance(Context context) {
if (manager == null)
manager = new ProgressDialogManager(context);
return manager;
}
public void showDialog(String msg) {
if (pDialog == null)
pDialog = new ProgressDialog(this.context);
pDialog.setMessage(msg);
pDialog.show();
}
public void closeDialog() {
if (pDialog != null) {
pDialog.dismiss();
}
}
}
当getInstance(this)方法我得到多个活动并且出错
android.view.WindowManager$BadTokenException: Unable to add window — token android.os.BinderProxy@447a6748 is not valid; is your activity running?
我的问题是 是不是很好的做法Progress Dialog As Singleton Class以及Error如何解决它的原因是什么
答案 0 :(得分:1)
android.view.WindowManager $ BadTokenException:无法添加窗口
如果您尝试向dialog
显示已完成的Activity
并且您正在通过其context
以在另一个dialog
中显示Activity
,则会发生此异常1}}。
您的代码会创建该方案:
假设您在ProgressDialogManager
中创建了Activity
的实例,并在dialog
中显示Activity
哪个可以正常工作。
现在您已销毁 Activity
并移至另一个Activity
但您之前创建的ProgressDialogManager
实例未被销毁,因为您将其设为单身。现在,如果您尝试获取ProgressDialogManager
的实例,它将返回先前创建的ProgressDialogManager
,并且它包含已被销毁的上一个context
的{{1}}。
现在,如果您尝试显示对话框,那么它将抛出此异常,因为您尝试使用死Activity
显示对话框。
要解决此问题,请在context
中传递context
并移除showDialog
中null
的{{1}}检查。
dialog
注意:不要将Context作为任何类的单例成员,因为 上下文一直在变化