单例和上下文

Singleton and Context

我已经开始使用 Android Big Nerd Ranch 指南学习 android。 清单 9.1 设​​置单例 (CrimeLab.java)

public class CrimeLab {
    private static CrimeLab sCrimeLab;
    private Context mAppContext;

    private CrimeLab(Context appContext) {
        mAppContext = appContext;
    }

    public static CrimeLab get(Context c) {
        if (sCrimeLab == null) {
            sCrimeLab = new CrimeLab(c.getApplicationContext());
        }
        return sCrimeLab;
    }
}

项目 - 我们正在创建犯罪对象列表,我们使用此 class 来存储列表。

我无法理解清单 9.1 中提供的单例 class 的需要。为什么我们首先需要这个 class?为什么我们需要一个上下文变量,它包含什么?

我搜索了 google 并发现上下文用于通知应用程序的其他部分正在发生的事情。但是,我不太明白我们要通知 CrimeLab 什么?我们可以创建没有单例的 crimeLab class 吗?如果是,为什么我们将 crimeLab 用作单例 class?

单例是 class 最多只有一个实例。因此私有构造函数和 public static get.

public 静态获取通常是无参数的。原因是如果使用不同的参数调用,那么调用的顺序会导致单例初始化不同,因此容易出现竞争条件。

在没有更多上下文的情况下,我只能得出这样的代码是错误的结论。

这不是Android的问题,它只是一种设计模式本身。 我已经在 Android Big Nerd Ranch 指南中阅读了这个示例。清单 9.1 设​​置单例 (CrimeLab.java) 以及将其设置为单例的原因描述为我们要存储 shared 数据。想象一下,当我们在 2 个地方构造没有单例的 CrimeLab 对象时:

CrimeLab cb1 = new CrimeLab(context);
CrimeLab cb2 = new CrimeLab(context);

创建新的对象,cb1和cb2中存储的数据不同

假设您在应用程序中使用数据库,它应该只有一个?是的

但为了相同的目的(单一数据位置),我们可以使用静态方法或属性,但您需要通过隐藏构造函数来防止创建对象

private CrimeLab(Context appContext) {
    mAppContext = appContext;
}