1

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

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

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

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

我在这里有什么选择?

4

1 回答 1

2

从 Android存储选项开始。

更远:

外部存储并非一直可用

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

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

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

于 2014-05-09T18:24:19.243 回答