Android应用在后台运行时如何保存数据

3

目前我正在开发一个xmmp客户端,当应用程序在前台运行时,一切都很好。但由于我在Application类中保留了相当多的数据(复杂的ArrayList、字符串和布尔值作为public static),所以当应用程序处于后台时,每个字段都会被垃圾回收。

所以我的问题是,当我从后台获取应用程序时,最好的方法是什么?这是一个大问题,因为我到目前为止在每个类中都使用了这些公共静态变量,这导致我的应用程序崩溃。问题在于用户可以从任何活动将应用程序放入后台,并且重新填充Application类中的数据似乎很困难。也许还有另一种方法来保存这些数据,并且可以全局访问它们,不会在后台被清除?

提前感谢!

2个回答

0

如果您的应用在后台被Android销毁,解决问题的标准方法是在主活动的onDestroy()函数中保存数据,并在再次打开应用程序时(使用bundle)在onCreate方法中检索此数据。

如果您希望数据即使在手机关闭时也能持久存在,可以考虑使用永久存储选项,如数据库。请参阅http://developer.android.com/guide/topics/data/data-storage.html

最后,如果您想要一种在后台持续运行的方式,可以查看Service类。但这需要您编写更多代码以便能够在服务和活动之间进行通信。


如果我使用服务,并且在服务中保留我的数据,它们将一直保持不变,直到我停止此服务?这听起来像一个好主意,但我担心活动-服务通信。我该如何实现?任何示例都将不胜感激。 - Ragnar
是的,您可以以这种方式启动服务,即使您的活动停止,它也会保持运行状态,为了实现服务和活动之间的通信,您可以使用Ibinder(我从未实际使用过),或者使用LocalBroadcastManager。后者效率略低,但易于使用,并在应用程序中保持数据私密性(比广播更好)。您可以在这里阅读完整的教程:http://www.intertech.com/Blog/using-localbroadcastmanager-in-service-to-activity-communications/ - Basile Perrenoud
太好了。感谢这个教程,但我有一个问题。如何从服务传递数据到监听器?目前我使用公共静态列表对象来迭代和更改它或者使用适配器来刷新它。那么如何将更改后的对象发送回服务呢?这可能吗? - Ragnar
你说的“从服务到监听器”是什么意思?我认为LocalBroadcastManager是你需要的。 - Basile Perrenoud
也许一些信息会有所帮助。我正在开发一个XMPP通信软件。我有一个监听器,它从XMPP服务接收消息并将它们添加到特定的聊天列表中。我现在使用的聊天列表是一个公共静态数组列表,保存在应用程序类中。正如我之前提到的,我想制作一个可以保存数据的服务。因此,监听器遍历该聊天列表并更改它(添加新消息)。因此,我想以某种方式从服务中获取此列表并对其进行一些更改,但更改应该可用,因此在我再次使用列表的另一个活动中具有正确的数据。 - Ragnar
好的,也许你的监听器可以使用LocalBroadcastManager将数据发送到服务,然后服务管理数据。 - Basile Perrenoud


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接