Android:保存Application Singleton Class中存储数据的最佳方法

时间:2011-05-19 18:56:58

标签: android application-singleton

保存Android应用程序的应用程序类(单例)中存储的数据的最佳方法是什么?

我有一个安静的大应用程序,在活动之间共享大量数据。因此大部分都存储在Application Singleton上。

这一切都很有效.. util应用程序被内存不足的操作系统杀死...然后当它返回时,它会尝试恢复活动,但由于缺少Application之前的必要数据而没有成功。 / p>

由于缺乏一种非常受欢迎(并且需要)的方法来根据您的经验在应用程序上保存数据,哪种方法最好?

除了“普通”字符串,布尔值等,比如Bitmaps,我能保存一些东西吗?

我已经看过这个How to declare global variables in Android?,但问题并不是关注在这种情况下重要的是什么,当应用程序因内存不足而被杀死时如何保存数据......

3 个答案:

答案 0 :(得分:17)

与许多问题一样,没有简单的答案。有许多方法可以保存数据,每种方法都有优点和缺点。 “最佳”方法取决于您的特定需求。您在此处拥有所有选项:http://developer.android.com/guide/topics/data/data-storage.html

  • 对于少数小位图,您可以对它们进行编码并将其存储在SharedPreferences中。
  • 对于更多更大的图像,您有两种选择
    1. database
    2. 中的blob列
    3. 将它们存储为internal storage中的文件,并将链接保留在您的偏好设置中。

SharedPreferences 存储字符串,因此可以存储任何字符串,包括任何序列化/编码对象。根据{{​​3}},SharedPreferences中的序列化字符串没有硬编码大小限制,但是基于字符串大小限制。尽管如此,this post指出整个SharedPreferences对象是作为单个xml文件编写的,因此您应该尽量将其大小保持在最小值。

JSON对象(或使用katit建议的GSON)是一个很好的轻量级选项,但我采取的方法是将它们保存到内部数据存储(除非数据非常大,即,许多兆字节,您更喜欢外部存储)并仅在SharedPreferences中保留链接。我不知道你的对象是什么样的,但是如果它们可以简化为一堆更简单的组件,你可以为它们考虑一个数据库(即每个对象一行,每个字段一列,包括一些blob)

文件与数据库方法还取决于您计划访问这些对象的次数。如果它们只被阅读一两次然后消失,那么我会选择文件而不是数据库及其游标的麻烦。如果有很多读取,我会选择一个数据库,也许你需要使用查询更快的搜索。

另请查看此帖子:this other post以获取特定于活动的选项。

答案 1 :(得分:2)

重要的是要注意,如果您使用单例类来保存信息并且您的应用程序被迫停止,则信息将被清除。

对于共享偏好设置,信息将保持不变。

希望这有帮助。

答案 2 :(得分:1)

有Java序列化程序,不确定是否需要。

我个人使用GSON来完成所有这些。谷歌图书馆与JSON合作。它允许将对象序列化为有效的字符串表示。

我主要用于RESTful服务通信,但后来了解到将对象表示存储到SQLLite或其他任何方面都非常有用。我可以通过这种方式非常容易地膨胀物体。