【问题标题】:where to persist multiple image files on android在哪里保存多个图像文件在android上
【发布时间】:2014-05-09 17:07:30
【问题描述】:

我正在编写一个使用许多图像(数十个)的 android 应用程序。这些图像与应用程序中的大多数其他数据一样,都是从远程数据库更新的。对于数据,我将拥有一个本地数据库,并在每次更新远程数据库时将其与远程数据库同步。

远程数据库会将图像存储为 URL,我的应用程序将从这些 url 下载图像以在应用程序中显示它们。所以我可以让我的本地数据库与远程数据库同步,我将拥有我正在使用的所有图像文件的 URL,我可以在每次运行应用程序时从远程服务器重新下载它们,但这显然是速度慢而且浪费大量数据。

我想要做的是,每次更新数据库并需要同步时,应用程序都会像往常一样同步其本地数据库并从其 URL 下载新图像,但随后会将图像文件保存在设备,所以下次运行应用程序时,它可以从设备中抓取图像。

我似乎找不到这样做的有效方法,也许是因为首先这样做是个坏主意? Sharepreferences 可能没有足够的空间,外部存储并非一直可用,而且我听说在本地数据库中存储大量二进制数据(例如图像)是个坏主意。

我有什么选择?

【问题讨论】:

    标签: android database persistence storage image-caching


    【解决方案1】:

    从安卓Storage Options开始。

    进一步:

    外部存储并非始终可用

    这在理论上是正确的,但在实践中,您将有 99% 的时间拥有external storage,特别是如果您正在为更新的设备进行开发。请注意,“外部存储”和 SD 卡不是一回事——这里的术语令人困惑。为此,请使用getExternalFilesDir()

    无论如何,如果您的图像存储量是合理的(恕我直言,internal storage。从 Android 3.x 开始,这不会像早期设备那样导致设备空间不足。在实践中,你会在 99% 的时间里都很好。在这里,您可能想要使用 getCacheDir() 返回的缓存目录。

    在我的一个应用程序中,我有大量与 CDN 同步的文件。我使用同步过程和数据库来检索文件的下载 URL 和 MD5 哈希值。如果 MD5 哈希值发生了变化,那么我会在后台再次下载文件。我只是使用哈希作为文件名来存储文件,因此我可以轻松解决重复文件。每隔一段时间,我也会遍历 cacheDir 以查看是否有任何文件不再在数据库中引用。

    【讨论】:

    • 太棒了,非常感谢您的建议。我想我会像你建议的那样使用 cacheDir/internal storage 选项。非常感谢您的回复,您的答案正是我想要的!
    • 很高兴为您提供帮助。祝你的应用好运!
    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    相关资源
    最近更新 更多