我正试图使用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活动的性质和系统本身(管理活动及其数据)。
以下是为什么单例对您的情况不利的示例:
你在其中存储了重要数据。用户知道他可以在主页按钮上关闭应用程序,给某人打电话或其他什么)也许有人在你的应用程序中给他打电话),当他打开你的应用时,他会回到同一个地方,一切都井然有序。(这是用户和安卓应用程序的预期行为)。系统可以很容易地杀死您的进程和其中的所有静态变量,以进行内存维护、应用程序不活动等。结果=数据丢失因此使用它不安全。