安卓新活动无法加载单例



我正试图使用Singleton在Activities之间共享一个大型数据对象。但是当我打开新的Activity时,singleton显示为空。在我看来,无论我调用的应用程序来自哪里,Singleton都应该是相同的。

单身汉的范围似乎仅限于个人活动。解决这个问题使我的应用程序变得非常复杂。我一定做错了什么。我甚至尝试在扩展的应用程序类中实例化它们。。。谷歌说我不应该使用这个。。。

有人能指出我哪里错了吗?即,为什么这个单体在每个活动中不包含相同的数据?

我称之为"活动",带有。。。

DataLog dataLog = DataLog.getInstance(this);

我。。。

public class DataLog extends ArrayList<String> implements Serializable {
    private static final long serialVersionUID = 0L;
    private static DataLog sInstance;
    private static Context mContext;
    public static DataLog getInstance(Context context) {
        mContext = context.getApplicationContext();
        prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
        if (sInstance == null) {
            sInstance = new DataLog();
        }
        return sInstance;
    }
    private DataLog() {
    }
    public boolean add(String entry) {
        super.add(entry);
        return true;
    }
    public void add(int index, String entry) {
        if (index > 0)
            super.add(index, entry);
        else
            super.add(entry);
    }
    public void clear() {
        super.clear();
    }
    ...
}

在android中共享大型数据集时,最好避免使用singleton。

Singleton用于短生命周期的对象。

切换到SharedPreferences、SQLite DB或文件存储。你并不是唯一一个经历过这种行为的人,原因在于android活动的性质和系统本身(管理活动及其数据)。

以下是为什么单例对您的情况不利的示例:

你在其中存储了重要数据。用户知道他可以在主页按钮上关闭应用程序,给某人打电话或其他什么)也许有人在你的应用程序中给他打电话),当他打开你的应用时,他会回到同一个地方,一切都井然有序。(这是用户和安卓应用程序的预期行为)。系统可以很容易地杀死您的进程和其中的所有静态变量,以进行内存维护、应用程序不活动等。结果=数据丢失因此使用它不安全。

最新更新