android保存会话状态跨活动

时间:2012-09-12 03:59:32

标签: android

跨多个活动维护会话信息的最佳方法是什么? 问题What is the best practices on Android to keep data between activities deathes/restarts for the whole application session?有一些想法,但对我没有帮助。

*我的应用程序有多个活动,清单标记为singleTop。它们基本上作为不同的标签工作 - 它们各自保持自己的一组片段和后台堆栈,因此将它们全部放入一个活动中会破坏用户的导航。

我目前正在将会话数据保存为我的Application子类创建的静态单例。这大部分时间都可以正常工作,除非整个应用程序被操作系统杀死以节省内存(如上面的链接中所述),例如,当用户在具有低RAM的设备上进行调用时。 该应用程序唯一的通知是它将被杀死(据我所知)是

Activity.onSaveInstanceState(Bundle outState)

问题是这个onSaveInstanceState最终将在每个活动上调用,而不仅仅是最顶层的活动(将在最强的时候出现的活动)用户最终返回我的应用程序)。当每个非顶级活动恢复时,我可以使用Activity.onRestoreInstanceState(Bundle savedInstanceState)来恢复我的单身会话,但非顶级活动会有数据副本(它们可能已被导航离开早在用户接到电话之前)。

一种解决方案是仅将数据恢复到单例会话仅当它当前为空时,但这依赖于第一个活动来接收作为顶级活动的Activity.onRestoreInstanceState。情况并非总是如此 - 如果用户接到电话,然后通过启动器图标返回应用,则主要活动将首先恢复并提前,用户所在的活动当他们接到电话时。

Application类中一个简单的通知,即操作系统(而不是用户)正在杀死应用程序,这正是我需要的 - 然后我会将会话保存到文件中,并在第一次调用{ {1}},但AFAIK不存在。

2 个答案:

答案 0 :(得分:3)

如果您在应用关闭时要存储某些数据并在应用启动时重新加载它们,则可以在应用程序关闭和启动时使用一种机制来存储和检索它们。为此,在Activity的生命周期中覆盖onStop()和onStart()方法。

enter image description here

我认为在这两种方法中存储和检索数据的最佳方法是SharedPreferences

答案 1 :(得分:0)

我只是坚持使用Application类来保存会话。使用Application类,您可以在任何地方访问会话,如果您有Context,那么您可以访问整个应用程序。 Application应用程序关闭后,Application类还会保留该值,以便在重新启动Application时更好地清除以前的会话。

由于Application类的主要用途是维护变量的全局状态,以便它们可以在整个Application中使用更新的值。