0

我正在尝试使用单例在活动之间共享一个大数据对象。但是当我打开新活动时,单例显示为空。在我看来,无论我从哪里调用应用程序,单例都应该是相同的。

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

有人可以指出我哪里出错了吗?ie 为什么这个singletom 在每个Activity 中不包含相同的数据?

我从一个活动中调用它...

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();
    }

    ...
}
4

1 回答 1

0

强烈建议避免使用单例在 android 中共享大型数据集。

单例用于短生命周期的对象。

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

这是一个为什么单例对您的情况不利的示例:

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

于 2013-08-17T17:14:38.797 回答