android中的线程该怎么停掉
android中我用一个线程下载文件,为什么不论是interrupt还是stop,它还是继续在下,该怎么停掉呢...
android中我用一个线程下载文件,为什么不论是interrupt还是stop,它还是继续在下,该怎么停掉呢
展开
展开全部
线程不要直接停止,那样会产生线程不安全的。
你要配合Handler来用。
当下载完之后调用handler.sendEmptyMessage()方法。
或者你换成AsyncTask来实现线程下载。
你要配合Handler来用。
当下载完之后调用handler.sendEmptyMessage()方法。
或者你换成AsyncTask来实现线程下载。
追问
好吧,但是我总得知道该怎么强行停止吧,为什么interrupt和stop都不管用,还能怎么停
追答
因为stop会造成线程的不安全,所以从JAVA 1.5版本之后,其API使用文档,就已经说明stop(), stop(Throwable) and suspend(), destroy() and resume()这些方法已经从1.5版本开始弃用。
而根据JAVA docs的说明,这些方法的不安全主要是两点:
1. 即刻抛出ThreadDeath异常,在线程的run()方法内,任何一点都有可能抛出ThreadDeath
Error,包括在catch或finally语句中。
2. 释放该线程所持有的所有的锁
那么,如何正确地终止一个线程呢,how to stop thread这篇文章作了详细的说明(http://forward.com.au/javaProgramming/HowToStopAThread.html),你不妨参考一下这篇文章。这篇文章说到的,总结起来就下面3点(在停止线程时):
1. 使用violate boolean变量来标识线程是否停止
2. 停止线程时,需要调用停止线程的interrupt()方法,因为线程有可能在wait()或sleep(), 提高
停止线程的即时性
3. 对于blocking IO的处理,尽量使用InterruptibleChannel来代替blocking IO。
如:
private volatile Thread blinker;
public void stop() {
blinker = null;
}
public void run() {
Thread thisThread = Thread.currentThread();
while (blinker == thisThread) {
try {
thisThread.sleep(interval);
} catch (InterruptedException e){
}
repaint();
}
}
展开全部
可以写一个while(flag)作为线程循环条件
下载完毕之後,flag = false 就可以停止了
之後android的垃圾回收会清理 你不用管
我做游戏开发的时候就是这麽干的
下载完毕之後,flag = false 就可以停止了
之後android的垃圾回收会清理 你不用管
我做游戏开发的时候就是这麽干的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以设置一个boolean变量,判断当前boolean变量的值,来决定是否停止。现在我没有环境,没法写,我帮你找了个参考资料,你看下,希望能有帮助。
链接地址:
http://blog.csdn.net/mal327/article/details/6992772
链接地址:
http://blog.csdn.net/mal327/article/details/6992772
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在handleMessage里面加入条件判断执行:myHandler.removeCallbacks(updateThead);就可以停掉啦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询