我需要在所有活动中共享一个列表,所以我扩展了我的应用程序类,以便在其中存储我的列表:
public class MyApplication extends Application {
public ArrayList<Object> theList = new ArrayList<Object>();
}
它工作得很好,除了有时当我恢复应用程序时,列表会被清除。该列表不是null,而是空的(当然,我在代码中从未清除过该列表)。
我想知道为什么名单被清除了。如果是因为垃圾收集器的原因,那么列表将为null,不是吗?
你知道一种即使在简历之后也能保存数据的方法吗?
您的列表位于RAM中,而不是设备存储中,因此,如果系统将应用程序从RAM中删除,即使是暂时删除,数据也会丢失。
你需要做的是将数据保存到一个数据库或共享的prefs中,但也要有一个内存模型
在MyApplication.onCreate方法中,启动ASyncTask从数据库或共享prefs加载数据,因此每次(系统)重新启动应用程序时,它都会正确加载数据。在MyApplication类中使用布尔值,这样您就可以检查init是否完成,并使其从需要数据的活动中可读,这样他们就可以知道是否正在从db加载数据(在这种情况下显示加载UI)。
每次在列表中添加或删除项目时,也要对db/shared prefs执行相同的操作,这样您保存的数据就会始终与内存中的模型同步。
你是选择数据库还是共享pref取决于你所拥有的数据类型,但由于它是一个列表,我猜数据库会更有意义。