android中的线程该怎么停掉

android中我用一个线程下载文件,为什么不论是interrupt还是stop,它还是继续在下,该怎么停掉呢... android中我用一个线程下载文件,为什么不论是interrupt还是stop,它还是继续在下,该怎么停掉呢 展开
 我来答
风中细叶
2012-12-10 · TA获得超过447个赞
知道小有建树答主
回答量:89
采纳率:0%
帮助的人:99.5万
展开全部
线程不要直接停止,那样会产生线程不安全的。
你要配合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();
}
}
Xwin1989
2012-12-11 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:107
采纳率:0%
帮助的人:82.3万
展开全部
可以写一个while(flag)作为线程循环条件

下载完毕之後,flag = false 就可以停止了

之後android的垃圾回收会清理 你不用管

我做游戏开发的时候就是这麽干的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
NO静月夜
2012-12-10 · 超过47用户采纳过TA的回答
知道小有建树答主
回答量:95
采纳率:0%
帮助的人:86.4万
展开全部
可以设置一个boolean变量,判断当前boolean变量的值,来决定是否停止。现在我没有环境,没法写,我帮你找了个参考资料,你看下,希望能有帮助。
链接地址:
http://blog.csdn.net/mal327/article/details/6992772
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ATlAnTIsHWY
2012-12-10
知道答主
回答量:48
采纳率:0%
帮助的人:22.6万
展开全部
在handleMessage里面加入条件判断执行:myHandler.removeCallbacks(updateThead);就可以停掉啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式