如何中断Android线程

 我来答
百度网友48c2e5b
2013-08-25 · 超过76用户采纳过TA的回答
知道答主
回答量:144
采纳率:0%
帮助的人:180万
展开全部
当你在后台使用Thread或者AsyncTask来处理一些耗时的操作时,可能想要对这些线程加以控制,其中包括中断线程。 很多情况下,当用户启动程序的时候,一个后台运行的线程会同时启动去加载内容。但是,当用户离开程序时,线程应该被打断,因为现在用户已经不再关注程序了,同时也不再关注线程处理的结果,而线程是要占用系统的资源的,如果不及时中断线程,会导致系统资源的浪费。 除此之外,你可以使用 Thread.interrupt()或者AsyncTask.cancel() 方法,但是这不会马上中断线程,因此,只能在自己的线程中实现中断并退出。 在许多情况下,后台运行的线程都有一个主循环,因此你可以在循环中判断线程是否被中断,若被中断,则退出循环,从而结束进程。例如一个线程下载线程,可以通过 isInterrupted() 方法判断当前线程是否被中断。 thread=newThread(){publicvoidrun(){while(!isInterrupted()&&hasMoreDataToDownload()){ downloadAndWriteSomeMore();}if(isInterrupted()){ deleteThePartiallyDownloadedFile();}else{callBack();}}}thread.start(); thread.interrupt(); 如果线程被中断,则调用 deleteThePartiallyDownloadedFile() 函数,删除没有完成下载的文件。当线程没有被中断,则调用callBack()函数,可以使用handler发送下载完成的信息。 如果你的线程中没有这样一个主循环,例如只是执行一个很耗时的SQL查询操作,可以在查询操作之后调用 来判断是否需要结束线程。
QQMSD8
2015-10-09 · 知道合伙人软件行家
QQMSD8
知道合伙人软件行家
采纳数:6788 获赞数:13239
没有做不到,只有想不到,帮助别人的同时也是对自己的提升

向TA提问 私信TA
展开全部
关于线程的结束有以下几点:
1.不要手动调用stop方法强行终止一个线程,这种方式不安全。
通过帮助文档,可以知道,Android的线程类本身就提供了一些公共方法去结束线程。
final void stop()
This method is deprecated. because stopping a thread in this manner is unsafe and can leave your application and the VM in an unpredictable state
但是,通过说明我可以看到,这些方法Android本身都是不推荐使用的,通过这种方式结束线程是不安全的。
2.线程里run函数短,执行完后线程会自行销毁,不用手动去终止。
3.手动停止,通过在run里设置标志先停止运行,再调用Thread.interrupt();注意,在run没有停止时调用.interrupt()没有效果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式