保存Android应用程序的应用程序类(单例)中存储的数据的最佳方法是什么?
我有一个安静的大应用程序,在活动之间共享大量数据。因此大部分都存储在Application Singleton上。
这一切都很有效.. util应用程序被内存不足的操作系统杀死...然后当它返回时,它会尝试恢复活动,但由于缺少Application之前的必要数据而没有成功。 / p>
由于缺乏一种非常受欢迎(并且需要)的方法来根据您的经验在应用程序上保存数据,哪种方法最好?
除了“普通”字符串,布尔值等,比如Bitmaps,我能保存一些东西吗?
我已经看过这个How to declare global variables in Android?,但问题并不是关注在这种情况下重要的是什么,当应用程序因内存不足而被杀死时如何保存数据......
答案 0 :(得分:17)
与许多问题一样,没有简单的答案。有许多方法可以保存数据,每种方法都有优点和缺点。 “最佳”方法取决于您的特定需求。您在此处拥有所有选项:http://developer.android.com/guide/topics/data/data-storage.html
SharedPreferences 存储字符串,因此可以存储任何字符串,包括任何序列化/编码对象。根据{{3}},SharedPreferences中的序列化字符串没有硬编码大小限制,但是基于字符串大小限制。尽管如此,this post指出整个SharedPreferences对象是作为单个xml文件编写的,因此您应该尽量将其大小保持在最小值。
JSON对象(或使用katit建议的GSON)是一个很好的轻量级选项,但我采取的方法是将它们保存到内部数据存储(除非数据非常大,即,许多兆字节,您更喜欢外部存储)并仅在SharedPreferences中保留链接。我不知道你的对象是什么样的,但是如果它们可以简化为一堆更简单的组件,你可以为它们考虑一个数据库(即每个对象一行,每个字段一列,包括一些blob)
文件与数据库方法还取决于您计划访问这些对象的次数。如果它们只被阅读一两次然后消失,那么我会选择文件而不是数据库及其游标的麻烦。如果有很多读取,我会选择一个数据库,也许你需要使用查询更快的搜索。
另请查看此帖子:this other post以获取特定于活动的选项。
答案 1 :(得分:2)
重要的是要注意,如果您使用单例类来保存信息并且您的应用程序被迫停止,则信息将被清除。
对于共享偏好设置,信息将保持不变。
希望这有帮助。
答案 2 :(得分:1)
有Java序列化程序,不确定是否需要。
我个人使用GSON来完成所有这些。谷歌图书馆与JSON合作。它允许将对象序列化为有效的字符串表示。
我主要用于RESTful服务通信,但后来了解到将对象表示存储到SQLLite或其他任何方面都非常有用。我可以通过这种方式非常容易地膨胀物体。