首页 > 解决方案 > 即使在应用程序被杀死后如何缓存数据一段时间?

问题描述

我当然是android的新手。

我正在构建一个新闻应用程序。我想在应用程序中添加缓存功能,例如 chrome for android(离线模式)和 Instagram。

应用程序的数据将通过服务器的 json 传输。所以我想要的是,应用程序从服务器请求数据以加载提要,并且数据被缓存,这样如果下次在没有互联网连接的情况下打开应用程序时,缓存的帖子就会显示出来(帖子的数量会受到限制)最重要的是,用户查看的完整文章(通过单击提要中的帖子并在另一个活动中阅读整篇文章)也应该被缓存,这样缓存中最多有“n”个帖子时间,如果缓存被 n 个帖子填满,最后添加到缓存中的帖子将被删除,依此类推...

如何实现这种缓存?与毕加索一样,每次应用程序被终止时缓存都会重置。sharedPreferences 和 SQLite 是一种永久存储。

那么实现这种缓存的最佳方法是什么。有没有可以使用的库,或者我应该设法使用 sharedPreferences/SQLite/Storage 来做到这一点?

标签: androidcaching

解决方案


从文档中:

如果您想暂时保留一些数据,而不是永久存储,您应该使用特殊的缓存目录来保存数据。每个应用程序都有一个专门用于此类文件的私有缓存目录。当设备内部存储空间不足时,Android 可能会删除这些缓存文件以恢复空间。但是,您不应依赖系统为您清理这些文件。您应该始终自己维护缓存文件并保持在合理的空间消耗限制范围内,例如1MB。当用户卸载您的应用程序时,这些文件将被删除。

如果你需要缓存一些文件,你应该使用 createTempFile()。例如,以下方法从 URL 中提取文件名,并在应用程序的内部缓存目录中创建一个具有该名称的文件:

private File getTempFile(Context context, String url) {
    File file;
    try {
        String fileName = Uri.parse(url).getLastPathSegment();
        file = File.createTempFile(fileName, null, context.getCacheDir());
    } catch (IOException e) {
        // Error while creating file
    }
    return file;
}

使用 createTempFile() 创建的文件被放置在您的应用程序私有的缓存目录中。您应该定期删除不再需要的文件。

要读取现有文件,请调用 openFileInput(name),并传递文件名。

您可以通过调用 fileList() 来获取所有应用程序文件名的数组。

参考资料:
数据和文件存储概述
缓存文件存储

SharedPreferences 更适合键值对而不是转储 json。
SQLite 适用于更大的数据库。

  • 内部文件存储:在设备文件系统上存储应用程序私有文件
  • 外部文件存储:将文件存储在共享的外部文件系统上
  • 这通常用于共享的用户文件,例如照片。
  • SharedPreferences:将私有原始数据存储在键值对中。
  • 数据库:将结构化数据存储在私有数据库中。

推荐阅读