相对handler而言,我更喜欢使用task进行异步处理。在我写数据分页加载时发现了一个问题:
当网络不稳定时,用户可能会多次上滑,这样就会导致去服务器端请求相同的数据。使用static boolean值进行处理是一种很恶心的方式,在思考解决这个问题的过程中,我想起同事曾经分享过使用handler来处理button的压力测试问题。Task应该也是有相应的函数来处理这种问题的,我查了下还真有:
下面是我的处理方案:
GetMoreDataTask getMoreDataTask;
if(getMoreDataTask == null || getMoreDataTask.getStatus() == AsyncTask.Status.FINISHED){
getMoreDataTask = new GetMoreDataTask(mItems, newsAdapter, mloadMoreText,
mloadMoreProgressBar, time,seriesId,Constants.AUDIO_TYPE+","+Constants.TEXT_TYPE);
getMoreDataTask.execute();
}else if(getMoreDataTask != null && getMoreDataTask.getStatus() == AsyncTask.Status.PENDING){
getMoreDataTask.execute();
}else {
//getMoreDataTask != null && getMoreDataTask.getStatus() == AsyncTask.Status.RUNNING
//DO NOTHING
}
很显然AsyncTask.getStatus()可以获取当前task的状态:
FINISHED 是结束
PENDING 是未开始(一个task在实例化之后只能执行一次,不然会报错)
RUNNING 是正在运行
ps 今天心情不好,说的太罗嗦。
本文探讨了在网络不稳定情况下,使用AsyncTask优化数据分页加载的问题。通过判断AsyncTask的状态,避免了重复请求相同数据的情况,提高了用户体验。
2613

被折叠的 条评论
为什么被折叠?



