我的申请包含以下活动
活动A - >连接到Web服务器并获取用户列表。它还将列表缓存在数据库中,以便提供脱机访问以及不向服务器发出重复的http请求。
单击活动A中的项目将显示活动B,其中包含与用户相关的信息。它也缓存在数据库中。
目前,我决定只在数据库中没有数据或者调用活动A的onCreate方法时才向服务器发出请求以获取用户列表。以下是它的代码片段
@Override
protected void onResume() {
super.onResume();
dbHelper = new DatabaseHelper(this);
int numOfUsers = dbHelper.numOfUsers(); //Retrieve the count of users
if (numOfUsers <= 0 || isOnCreateCalled) {
// retrieve the list of users from the server
// Update the database with the new values
} else {
// retrieve the list of users from the database
}
}
类似的方法用于缓存活动B中存在的用户相关数据。
我想知道是否有比这种简单方法更好的策略来决定何时从网络读取数据并使缓存的数据库数据无效,何时从缓存中读取。
提前致谢。
答案 0 :(得分:0)
这个问题的答案将取决于用例,但这里的问题是你能向用户显示陈旧数据吗?这有多重要?如果它不那么重要,那么你的作品就很棒。如果您想要更强大的策略,我建议您使用GCM,Google Cloud Messaging。使用GCM,您的服务器可以发送给您&#34; tickles&#34;什么时候有新鲜数据。然后,您的应用可以响应&#34;发痒&#34;并从您的服务器获取所有最新数据。这样做的好处是,即使用户没有运行您的应用,您也可以使数据库保持最新状态。
答案 1 :(得分:0)
我不确定这种功能是否内置。像Volley这样的库将根据您设置的参数缓存网络I / O.但是,您最好的选择可能是构建自己的解决方案,使用HTTP标头,Entity Tags等等。也许您可以随时向服务器请求一些微小的序列化数据,比较结果,并从那里确定是否要提出额外的请求。
简短的回答:有很多方法!