【问题标题】:Android Caching To DiskAndroid缓存到磁盘
【发布时间】:2018-01-01 01:46:39
【问题描述】:

我想知道是否有办法使用 Android 将 Web 请求中的任意数据缓存到磁盘上。我想到的流程如下:

数据存储为键值对,其中键是某个标识符,值是原始数据。在实际发出 Web 请求之前,我会检查密钥是否在缓存中,如果是,我会跳过发出 Web 请求。如果缓存中不存在密钥,则我发出 Web 请求并将数据存储在磁盘上。我希望可以在应用程序的多次运行中访问缓存的数据,这样我就不必在每次启动应用程序时再次发出 Web 请求。

我正在考虑为此使用SharedPreferencesSharedPreferences 会是解决这个问题的最佳方式吗? SharedPreferences的单个key可以存储1兆字节的数据吗?

【问题讨论】:

    标签: java android caching sharedpreferences


    【解决方案1】:

    存储缓存文件的最佳解决方案是将它们存储在缓存目录中。幸运的是,Android API 为这个问题提供了解决方案:Context#getCacheDir。您可以在返回的目录中创建文件,您可以使用映射来存储每个文件的标识符以便检索它们。

    虽然,这个解决方案有一些限制:

    当设备其他地方需要磁盘空间时,系统会自动删除该目录下的文件。

    缓存数据只能用于信息的临时存储。

    【讨论】:

    • 感谢您的回复!这很有帮助。鉴于这里的限制,您认为将这些东西存储在 sqlite 中可能更明智吗?
    • 我认为在你的情况下,这种方法是可行的。仅当用户的设备存储空间不足时才会删除缓存文件。如果它被删除,您似乎也可以从网络服务中重新获取数据。在大多数情况下,缓存文件应该保持不变。
    【解决方案2】:

    我可能来晚了,但几年前我为此创建了一个库:

    https://github.com/fcopardo/EasyRest

    这个想法是允许应用程序在不稳定或无连接的情况下运行,而无需实现辅助数据层来持久化数据,而是尽可能长时间地保留响应,并刷新它们而不强迫用户等待。看看吧,你可能会有一些想法。

    【讨论】:

    • 我实际上开始在我的应用程序中使用这个库,这太棒了!作者是一个非常好的人,他向我展示了一些如何使用它的示例。他甚至针对我的代码库做了一些 PR。 github.com/Patchett/CryptoBuddy/pull/1/files 这个库非常强大,你可以看出它是由专业人士编写的。我会极力推荐它。它极大地提高了我的应用程序的速度和性能。
    猜你喜欢
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    相关资源
    最近更新 更多