我的应用程序以这种方式工作:
的ListView ----> onListItemClick ----> detailspage ----> backpressed ---->去 返回列表---->再次点击同一项目---->相同的详细信息页面 再次加载。
详细信息页面从服务器获取大量数据并填充其视图。
因此,每次在列表视图中单击一个项目时,它需要2-4秒。我已经看过如果第二次调用同一页面,他们不会加载任何数据的应用程序。
我该怎么做?
目前在我的应用中就是这样:
onCreate调用AsyncTask来获取数据并填充视图
onResume,onPause,onStart,onStop,onDestroyed
中没有任何内容
答案 0 :(得分:0)
您可以将该域对象的数据保存为单个,然后在您输入详细信息页面时,有两种方法可以使用。
例如,如果你有一个Person类列表。
public class Person {
private String name;
private Image img;
...
}
然后你可以拥有一个PersonCache,它是一个单例缓存列表中所选最后一个Person的数据:
public class PersonCache {
private Person cachedPerson;
private static PersonCache instance;
private PersonCache(){
...
}
public PersonCache getInstance(){
if(instance == null){
instance = new PersonCache();
}
return instance;
}
public Person getCachedPerson(){
return cachedPerson;
}
public void setCachedPerson(Person p){
cachedPerson = p;
}
}
因此,在onCreate
完成提取JSON数据后,您需要创建一个Person对象并调用setCachedPerson
。
如果您知道详细信息页面中的数据尚未更新
在详细信息页面的onCreate
中,检查已选择的对象是否与单例中缓存的对象相同(如果对象在数据库中具有唯一ID,则可以查看这些对象以检查它是否相同) 。
如果您不知道是否有新数据 在AsyncTask中发出GET请求时,可以使用 If-Modified-Since 技术。
基本上你要做的是添加一个header参数 key:If-Modified-Since 价值:1994年10月29日星期六19:43:31 GMT
如果服务器没有新数据,它可以使用304
进行回复,并且不会发送任何响应正文,但如果它有新数据,它将使用200
进行响应,并像正常情况一样发送数据。
实现这一点也需要在服务器端进行一些实现。 以下是有关该技术的更多信息: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html(第14.25节)