【问题标题】:Android: Saving images into Sqlite databaseAndroid:将图像保存到 Sqlite 数据库
【发布时间】:2012-12-16 03:37:09
【问题描述】:

我想知道将图像作为 BLOB 存储在 sqlite 数据库中是否是个好主意? 有没有人有性能 - 存储图像(blob)的经验。

我的 android 应用程序很小,需要处理 20 到 100 张图片(每张图片 100 kb 到 1MB)。最坏的情况:我会说,我的数据库可以达到 100 MB 的大小。这对数据库性能有显着影响吗? 平均情况:我猜我的应用程序的平均用户有 40 张图片,每张图片 200 kb,所以数据库的大小约为 8 MB。 顺便提一句。当然数据库还存储其他“正常”数据,所以它不仅仅是一个图像数据库:)

存储存储在存储(内部或 SD 卡)上的图像的路径是更好的方法吗?我想从数据库中检索图像文件路径并从文件中打开和加载图像会慢一些(但不是很重要,因为我一次只需要加载两个图像)。

第二个问题: 如果我使用第二种方法(将图像文件的路径存储在数据库中并加载图像文件): 磁盘缓存(DiskLruCache)在这种情况下有用吗?它会带来显着的性能提升吗?我的理解是磁盘缓存将存储位图(而不是编码的 jpg 或 png),因此磁盘缓存将直接从存储加载位图,我的应用程序将节省解码图像(jpg 或 png)的时间。那是对的吗? 顺便提一句。在“数据库方法”中,我会将已经解码的图像存储为位图。所以在我看来它类似于磁盘缓存,不是吗?

编辑: 我忘了告诉你,我需要将图像持久存储在设备上。我不是在谈论缓存图像,例如我从 Web 服务中检索到的图像......

【问题讨论】:

  • 为什么不将图像保存到缓存文件夹?
  • 1.用户可以在安卓应用设置中清除缓存。 2. 在缓存文件夹中保存图像与将文件保存在任何其他文件夹中具有相同的性能,不是吗? 3. 我喜欢事务的概念,我可以通过将图像存储在数据库中来使用
  • 您可以保存到您喜欢的文件夹或外部存储,更多信息请阅读developer.android.com/guide/topics/data/data-storage.html不建议将图像保存到数据库

标签: android image sqlite caching


【解决方案1】:

我的猜测是,如果您在其中存储这么多信息,数据库会变得非常慢,尤其是当您自己检索图像时。

另一方面,据我所知,每个用户在安装应用程序后都会下载与他相关的图像。这是使用另一个 SO 用户在我几天前提出的问题中向我推荐的库的理想场所:Universal Image Downloader。这是我所说的the thread 的链接。

这个库在磁盘缓存上使用,但为您抽象了所有复杂性(希望我还没有尝试过,但看起来很有希望)。

【讨论】:

  • 通用图像下载器看起来非常有趣和有前途。谢谢你的提示!事实上,我计划为我的应用程序实现类似的东西(特别是在加载真实图像时显示“空”图像),但我想我会先尝试这个库。但是,在我继续之前,很高兴知道数据库方法对我的应用程序是否更好
  • @sockeqwe 我想我已经在回答中提到了这一点,但再一次:数据库中的所有内容都会出现性能问题,您必须自己实现更多自定义逻辑。基本上我观察到,在某些情况下(尤其是在读取大块数据时),在 android 中数据库的性能比普通文件系统差很多。此外,UID 有一些细节,比如说最多必须缓存多少等
猜你喜欢
  • 2020-02-10
  • 2012-11-29
  • 2020-11-30
  • 2011-06-29
  • 1970-01-01
  • 2012-01-18
  • 2016-06-25
  • 1970-01-01
  • 2019-04-02
相关资源
最近更新 更多