【问题标题】:Efficency data storage in AndroidAndroid中的高效数据存储
【发布时间】:2012-10-23 01:48:49
【问题描述】:

我需要存储来自网络的本地化数据,这些数据来自 JSON 字符串。到目前为止,我有一个 DataAdapter,它期望 JSONObject 中的数据并收集数据以进行可视化。但是现在我根本没有缓存。

我想存储上次调用的数据,包括 Etag 以观察变化。因此,我想首先显示缓存的数据,并在网络上查看是否有一些更改,并在可行的情况下显示它们。我看到了三个选项:

  • 将整个 JSON 简单存储在一个文件中
  • 在 SQLite 数据库中存储数据
  • 使用CouchDB for Android

我不确定哪种方式效率最高...我还想存储/缓存图像。顺便说一句,我还希望数据被加密,到目前为止,存储系统不能直接在闪存上写入任何数据,几秒钟后会出现另一个数据绑定。而且我还想节省电池。

哪种存储数据的能源效率最高?
哪种方式存储数据最快?

【问题讨论】:

  • 在 AT&T 开发者网站developer.att.com/developer/forward.jsp?passedItemId=7200042 上,有很多关于如何最有效地利用缓存和网络的信息。
  • 这是一个非常好的资源,但我知道该页面的大部分内容...如果您可以在客户端发布有关缓存的链接,我很乐意接受这样的链接作为答案.

标签: android database caching storage


【解决方案1】:

对于小型网络服务请求,您可以使用ResponseCache。在处理较大的对象时,您可能希望创建自己的缓存。

你也可以:

  • 序列化数据并保存到本地文件
  • 对于基本数据,如果要保存更长时间,可以将其保存在 SharedPreferences
  • 如果您有大量数据并且需要对其执行关系操作,请使用 sqlite。

图片缓存见:

Android image caching

Android: Image cache strategy and memory cache size

【讨论】:

  • 将数据缓存到浏览器缓存中看起来是一个有趣的想法,但我不能使用 URL 类,因为它不支持 ntlm 身份验证方案。但是,我想加密存储的数据,并且您的链接似乎都没有提供加密支持。我在一个参考问题中看到SoftReference 类看起来很有帮助。谢谢
【解决方案2】:

我的解决方案是扩展 LruCache,在此我覆盖 sizeOf 函数以获取实际大小。

对于Drawables,我使用以下代码:

if(rawdata  instanceof BitmapDrawable) {
    Bitmap bmp = ((BitmapDrawable)rawdata).getBitmap();
    mem += bmp.getRowBytes() * bmp.getHeight();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 2012-07-30
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 2019-07-07
    • 2015-02-04
    相关资源
    最近更新 更多