android - 使用进度对话框作为单例类是好习惯吗

标签 android singleton progressdialog

<分区>

我有单例的进度对话框类

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) 方法多个 Activity 我得到和错误

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 是一种好的做法吗?错误的原因是什么?如何解决?

最佳答案

android.view.WindowManager$BadTokenException: Unable to add window

当您尝试显示 dialog 时会发生此异常。在Activity已经完成,你正在传递它的 context显示dialog在另一个Activity .

您的代码创建该场景:

假设您创建了一个 ProgressDialogManager 的实例在Activity并显示了 dialog在那Activity这会很好用。

现在你摧毁了那个Activity并搬到另一个Activity但是你之前创建的 ProgressDialogManager实例不会被销毁,因为您将其设为单例。现在,如果您尝试获取 ProgressDialogManager 的实例它将返回之前创建的 ProgressDialogManager它包含 context以前的 Activity已被销毁。

现在,如果您尝试显示对话框,那么它将抛出此异常,因为您正尝试使用 dead context 显示对话框。 .

要解决此问题,请传递 context也在 showDialog并删除 null检查dialogshowDialog .

public void showDialog(String msg, Context context) {
    pDialog = new ProgressDialog(context);
    pDialog.setMessage(msg);
    pDialog.show();
}

Note : Don't make Context as a singleton member of any class because context keeps changing all the time

关于android - 使用进度对话框作为单例类是好习惯吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50433785/

相关文章:

java - 第一个 Android 应用程序中的错误

php - 如何在android应用程序和php服务器之间同步数据?

java - 如何使用java合并json数组?

java - Spring相当于EJB Singleton来维护状态

swift - 始终对 Swift 单例使用 [unowned self] 安全吗?

android - 在 Android 中使用上下文不显示进度对话框

android - 蓝牙 LE 错误 133 触发断开连接

c++ - 使用什么代替静态变量

android - 对 Activity 的 onCreate() 的长时间操作

Android Fragments - 添加进度条