界面就是一个列表ListView加一个刷新按钮Button
流程:
1.点击刷新时,新建线程从网络取回数据,更新ListView,线程取数据时时会有ProgressDialog提示“正在读取”
2.线程跑完,关掉ProgressDialog,用读取到的数据不为空则更新ListView
3.如果读取中途关掉ProgressDialog,则线程内标示符置false,抛弃改线程线程代码大致如下private class LoadListRunnable implements Runnable {
private boolean isDrop;
public void drop() {
isDrop = true;
} @Override
public void run() {
{ ...... } //http从网络读取数据,阻塞等待回应 if(!isDrop) {
mHandler.sendMessage(SUCCESS);
}
}每次点击刷新都把现有的LoadListRunnable给drop掉,重新new一个LoadListRunnable来去数据old_LoadListRunnable.drop();
old_LoadListRunnable = new LoadListRunnable();
newThread(old_LoadListRunnable).start(); //也有用线程池的
现在的问题是,不停的进行“刷新->取消->刷新->取消”操作的话,drop掉线程会阻塞在等待网络返回数据的状态,甚至有些线程一直在wait状态,这就导致了线程的大量堆积,十分的占用资源。java线程不能直接kill掉,所以十分头疼...求能解决应对用户这种“刷新->取消->刷新->取消”操作的方法
流程:
1.点击刷新时,新建线程从网络取回数据,更新ListView,线程取数据时时会有ProgressDialog提示“正在读取”
2.线程跑完,关掉ProgressDialog,用读取到的数据不为空则更新ListView
3.如果读取中途关掉ProgressDialog,则线程内标示符置false,抛弃改线程线程代码大致如下private class LoadListRunnable implements Runnable {
private boolean isDrop;
public void drop() {
isDrop = true;
} @Override
public void run() {
{ ...... } //http从网络读取数据,阻塞等待回应 if(!isDrop) {
mHandler.sendMessage(SUCCESS);
}
}每次点击刷新都把现有的LoadListRunnable给drop掉,重新new一个LoadListRunnable来去数据old_LoadListRunnable.drop();
old_LoadListRunnable = new LoadListRunnable();
newThread(old_LoadListRunnable).start(); //也有用线程池的
现在的问题是,不停的进行“刷新->取消->刷新->取消”操作的话,drop掉线程会阻塞在等待网络返回数据的状态,甚至有些线程一直在wait状态,这就导致了线程的大量堆积,十分的占用资源。java线程不能直接kill掉,所以十分头疼...求能解决应对用户这种“刷新->取消->刷新->取消”操作的方法
解决方案 »
- Android 中把一张图片合成到一个视频里面去
- webview在启动时,有一个空白页面,这个空白页面如何换成动画的显示方式
- android video player 滑屏切换
- 移动开发先学ME还是直接学android
- 怎么写程序实现长按HOME键进行进程切换的功能?进程不重新创建直接恢复运行
- 急!Android图片保存的问题
- 服务器和客户端开发时出现的小问题
- Eclipse Android Webview 问题,老师们解决下,学生感激感激+
- mediaplayer添加了surfaceview结果声音能正常播放,画面不会自动播放,点击seekbar可以看到这个节点的画面但是不能自动播放
- web app怎么实现文件下载呢,用的是appframework框架!
- Bitmap 回收了,为什么DDMS中HEAP监控内存不会减小?
- 新手,请大神帮忙解决一个jni调用问题.
更新列表是一种可能会反复执行的操作,所以用AsynTask做是不合适的,而且如果在重复操作的情况下还不如thread+runnable或线程池好控制
这样就能确保,在一个子线程跑完之前不会有新的子线程出现,从而解决问题。