Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 恢复应用程序后,列表已清除_Android_List_Global Variables_Onresume - Fatal编程技术网

Android 恢复应用程序后,列表已清除

Android 恢复应用程序后,列表已清除,android,list,global-variables,onresume,Android,List,Global Variables,Onresume,我需要在我的所有活动中共享一个列表,因此我扩展了我的应用程序类,以便在其中存储我的列表: public class MyApplication extends Application { public ArrayList<Object> theList = new ArrayList<Object>(); } 公共类MyApplication扩展应用程序{ public ArrayList theList=新的ArrayList(); } 它工作得很好,但有时

我需要在我的所有活动中共享一个列表,因此我扩展了我的应用程序类,以便在其中存储我的列表:

public class MyApplication extends Application {
    public ArrayList<Object> theList = new ArrayList<Object>();
}
公共类MyApplication扩展应用程序{
public ArrayList theList=新的ArrayList();
}
它工作得很好,但有时当我恢复应用程序时,列表会被清除。列表不是空的,而是空的(当然,我在代码中从不清除列表)

我想知道为什么名单被清除了。 如果是因为垃圾收集器,列表将为空,不是吗


您知道在恢复后保存数据的方法吗?

您的列表保存在RAM中,而不是设备存储器中,因此,如果系统从RAM中删除应用程序,即使是瞬间,数据也会丢失

您需要做的是将数据保存到db或shared prefs中,但也要有一个内存模型

在MyApplication.onCreate方法中,启动一个ASyncTask以从db或共享prefs加载数据,因此每次应用程序(由系统)重新启动时,它都会正确加载数据。在MyApplication类中使用布尔值,以便检查初始化是否完成,并使其从需要数据的活动中可读,以便他们知道是否正在从db加载数据(在本例中显示加载UI)

每次从列表中添加或删除项目时,也要对db/shared prefs执行相同的操作,以便保存的数据始终与内存中的模型同步


选择db还是共享首选项取决于您拥有的数据类型,但由于它是一个列表,我猜db会更有意义。

使用永久性存储,如sqlite数据库或共享首选项来保存和检索数据。在我看来,使用数据库这篇文章不是一个好的选择,因为数据经常更改。共享首选项不合适,因为列表包含太多数据。感谢您的回复。实际上,我不认为我的应用程序被系统杀死,事实上,当我恢复应用程序时,当前的活动是相同的。你可以通过在MyApplication onCreate中添加日志来轻松验证这一点。另外,在运行应用程序时检查日志猫(特别是检查GC消息)。然而,这里重要的一点是,仅存在于内存中的数据可能很容易丢失,因此,如果您希望数据在会话期间保持不变(即使您只需离开应用程序1秒),您应该将其存储在设备上。