我正在尝试使用Singleton在Activities之间共享一个大型数据对象。但是当我打开新的Activity时,单例出现为空。在我看来,无论我在应用程序的哪个地方调用,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();
}
...
}
答案 0 :(得分:0)
强烈建议避免单例在android中共享大型数据集。
单身人士用于短生命周期对象。
切换到SharedPrefferences,SQLite DB或文件存储。您并不是唯一经历过这种行为的人,原因在于Android活动的性质和系统本身(管理活动及其数据)。
以下是单身人士对你的案件不利的一个例子:
您在其中存储了重要数据。用户知道他可以关闭主页按钮上的应用程序来打电话给某人或其他任何人。当他在你的应用程序时,可能有人打电话给他),当他打开你的应用程序时,他会回到同一个地方,一切都井井有条。 (这是用户和Android应用程序的预期行为)。系统可以轻松杀死你的进程及其中的所有静态变量,用于内存维护,应用程序不活动等等...... 结果=数据丢失。因此使用它是不安全的。