android - 即使在应用程序被杀死后如何缓存数据一段时间?
问题描述
我当然是android的新手。
我正在构建一个新闻应用程序。我想在应用程序中添加缓存功能,例如 chrome for android(离线模式)和 Instagram。
应用程序的数据将通过服务器的 json 传输。所以我想要的是,应用程序从服务器请求数据以加载提要,并且数据被缓存,这样如果下次在没有互联网连接的情况下打开应用程序时,缓存的帖子就会显示出来(帖子的数量会受到限制)最重要的是,用户查看的完整文章(通过单击提要中的帖子并在另一个活动中阅读整篇文章)也应该被缓存,这样缓存中最多有“n”个帖子时间,如果缓存被 n 个帖子填满,最后添加到缓存中的帖子将被删除,依此类推...
如何实现这种缓存?与毕加索一样,每次应用程序被终止时缓存都会重置。sharedPreferences 和 SQLite 是一种永久存储。
那么实现这种缓存的最佳方法是什么。有没有可以使用的库,或者我应该设法使用 sharedPreferences/SQLite/Storage 来做到这一点?
解决方案
从文档中:
如果您想暂时保留一些数据,而不是永久存储,您应该使用特殊的缓存目录来保存数据。每个应用程序都有一个专门用于此类文件的私有缓存目录。当设备内部存储空间不足时,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:将私有原始数据存储在键值对中。
- 数据库:将结构化数据存储在私有数据库中。
推荐阅读
- python - 为什么 pycharm 无法识别我的 pytest 测试并显示测试输出?
- electron - 是否可以在电子内部运行框架?
- excel - 根据日期范围递归获取文件列表
- ios - 如何在不移动滑块拇指色调的情况下将多种颜色应用于uislider的轨道?
- reactjs - 带有 defaultMessage 的 FormattedMessage 在控制台上显示错误
- eclipse - “Scala IDE(4.7-x) with Eclipse 2018-12 (4.10.0)”中的自动完成功能不起作用
- angular - Angular Material cdkDropList:防止元素在未放入容器时向后移动
- c# - UserManager: GenerateEmailConfirmationTokenAsync() 和 ConfirmEmailAsync() 在不同的Web应用程序中
- excel - Visual Studio - 单元测试适配器未能连接到数据源或读取数据
- android - debug.keystore (系统找不到指定的路径)