10

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

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

这一切都很好..应用程序在内存不足时被操作系统杀死......然后当它回来时,由于缺乏以前在应用程序上的必要数据,它试图恢复活动但没有成功。

由于缺乏根据您的经验在应用程序上保存数据的非常受欢迎(和需要)的方法,最好的方法是什么?

除了“普通”字符串、布尔值等(如位图)之外,我还能保存东西吗?

我已经看过这个如何在 Android 中声明全局变量?但问题不在于在这种情况下什么是重要的,当应用程序因内存不足而被杀死时如何保存数据......

4

3 回答 3

18

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

  • 对于一些小的位图,您可以对它们进行编码并将它们存储在SharedPreferences中。
  • 对于更多更大的图像,您有两种选择
    1. 数据库中的 Blob 列
    2. 将它们作为文件存储在您的内部存储中,并将链接保留在您的首选项中。

SharedPreferences存储字符串,因此可以存储任何字符串,包括任何序列化/编码对象。根据这篇文章,SharedPreferences 中的序列化字符串没有硬编码大小限制,而是基于字符串大小限制。尽管如此,this other post指出整个SharedPreferences对象被编写为单个xml文件,因此您应该尝试将其大小保持在最小。

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

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

还要检查这篇文章:http ://android-developers.blogspot.in/2009/02/faster-screen-orientation-change.html以获取特定于活动的选项。

于 2011-05-19T19:10:40.533 回答
2

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

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

希望这可以帮助。

于 2012-10-02T05:06:59.210 回答
1

有 Java 序列化器,不确定是不是你需要的。

我个人将 GSON 用于所有这些。它是使用 JSON 的谷歌库。它允许将对象序列化为有效的字符串表示形式。

我主要将其用于 RESTful 服务通信,但后来了解到将对象表示存储到 SQLLite 或其他东西非常有效。通过这种方式,我可以很容易地为物体充气。

于 2011-05-19T19:07:30.080 回答