Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中缓存和存储对象并设置过期策略?_Android_Performance_Caching_Storage - Fatal编程技术网

如何在android中缓存和存储对象并设置过期策略?

如何在android中缓存和存储对象并设置过期策略?,android,performance,caching,storage,Android,Performance,Caching,Storage,我有一个从互联网获取数据的应用程序,为了更好的性能和带宽,我需要实现一个缓存层 互联网上有两种不同的数据,一种是每小时变化一次,另一种基本上没有变化。因此,对于第一种类型的数据,我需要实施过期策略,使其在创建1小时后自动删除,当用户请求该数据时,我将首先检查存储,如果未找到,则转到internet 我考虑使用SharedPreference或SQLDatabase来存储json数据或序列化对象字符串 我的问题是: 1) 我应该使用什么,SharedPreference或SQLDatabase或其

我有一个从互联网获取数据的应用程序,为了更好的性能和带宽,我需要实现一个缓存层

互联网上有两种不同的数据,一种是每小时变化一次,另一种基本上没有变化。因此,对于第一种类型的数据,我需要实施过期策略,使其在创建1小时后自动删除,当用户请求该数据时,我将首先检查存储,如果未找到,则转到internet

我考虑使用SharedPreference或SQLDatabase来存储json数据或序列化对象字符串

我的问题是:

1) 我应该使用什么,SharedPreference或SQLDatabase或其他任何东西,一段数据不大,但可能有很多这样的数据实例


2) 如何实现过期系统。

我将使用
SQLite
进行存储,并在
应用程序
子类中有一个
最后失效的时间戳。

每次数据访问调用时,都会将它与
System.currentTimeMillis()
进行比较,以决定是否应该提取一个新的集合。有一个很薄的代理层

您可以使用HTTP HEAD方法检查服务器上的修改日期,并查看是否确实需要获取新数据。每次应用程序启动时,以及在运行过程中,每隔一段时间,查询服务器以查看数据是否已更改。这假设数据缓存在服务器上,而不是在每次请求时动态生成,也不依赖于发出请求的客户端

因此,您需要存储每个项目的数据和日期。如果数据是一个中等长度的字符串,并且总长度小于几千字节,那么SharedReference就足够了。如果数据长度存在已知上限,则使用数据库,否则可以使用普通文件。每次提交时,SharedReferences都会写入一个xml文件

您可以创建一个具有长睡眠间隔的线程来执行定期检查,或者创建一个处理程序并使用postDelayed或类似方法来生成检查线程。尽可能频繁地检查项目以查找过时数据。如果您每10分钟检查一次,则最多允许使用10分钟的旧数据,平均为旧数据的一半。无论如何,在大多数情况下,在启动时检查会使事情看起来是最新的


如果所有项目同时过期,那么您只需要检查一个项目的日期就知道它们都应该被刷新。如果没有,您可以尝试使用条件GET,而不是检查每个项目的标题。

我会尽量避免HTTP调用。一旦您决定无论如何都要访问服务器,您仍然可以通过查看数据是否确实发生了更改来节省一些带宽。