美好的一天,抱歉相当长的帖子。这更像是一个设计决策而不是其他任何东西。我有一个包含4个片段的活动。现在我通过slideMenu切换片段。 每个Fragment都调用一个webservices,并获得一个与AsyncTask相关的JSONObject结果。我正在寻找一个结构,我必须缓存每个JSONObject结果 对于每个片段。当用户在片段之间切换时,它会检查是否有一定的时间已到期并采取相应的行动
- 如果缓存时间已过,请重新加载网络请求。 - 如果不是,请使用缓存的JSONObject结果并显示给用户。
这意味着如果我有6小时的过期时间或者后端的数据每6小时更新一次,我应该只通过asynctask从webservice请求 每6小时一次,其他时间只使用缓存的值。
我目前的实施 1.通过扩展Application类以便第一次为每个片段加载来获得一组全局布尔变量。
public class MyApp extends Application {
private boolean First_load_frag1 = true;
private boolean First_load_frag2= true;
public void setLoadFrag1(boolean value){
First_load_frag1 = value;
}
public boolean getLoadFrag1(){
return First_load_frag1;
}
}
在我的片段中,我在onCreate()中将它们设置为true,使用它来确定是否第一次请求然后将其设置为false,这样我就不再需要了。 然后在我的片段OnResume()中,我检查cached_time是否已经过期。我做这样的事情
@覆盖 public void onResume(){ super.onResume(); public final static long MINUTE_MILLIS = 60000;
Calendar cal = Calendar.getInstance();
int mins = (int) ((cal.getTimeInMillis()/MINUTE_MILLIS) - (cached_timer/MINUTE_MILLIS);
if(mins > 180){
Toast.makeText(getActivity(), "on resume refresh data", Toast.LENGTH_LONG).show();
requestService(); //this sends a request to the webservice
} else {
cached_result = manager.getCachedJSONResult(CACHED_RESULT );
if(cached_result != null){
Toast.makeText(getActivity(), "on resume cached data", Toast.LENGTH_LONG).show();
loadCachedResult(cached_result);
}
}
}
这对我来说是一种处理这种情况的混乱方式。考虑到应用程序崩溃和活动生命周期,这是一个很好的解决方案做这样的东西oris有一个更优雅的方式,我可以实现这一点?每一个输入都将非常感激。感谢
答案 0 :(得分:0)
1.首先,您需要创建用于保存片段数据的数据结构