如何中断Android线程

http://www.blogjava.net/andteamroid/archive/2011/03/09/346018.html

当你在后台使用Thread或者AsyncTask来处理一些耗时的操作时,可能想要对这些线程加以控制,其中包括中断线程。

    很多情况下,当用户启动程序的时候,一个后台运行的线程会同时启动去加载内容。但是,当用户离开程序时,线程应该被打断,因为现在用户已经不再关注程序了,同时也不再关注线程处理的结果,而线程是要占用系统的资源的,如果不及时中断线程,会导致系统资源的浪费。

    可是怎么去中断一个线程呢?从文档中可以看到Thread类有stop()方法,这个方法提供一个“简单”的方法去中断线程。不过这种野蛮的中断方式会导致一些问题,而且现在这个方法已经不推荐使用了。

    除此之外,你可以使用Thread.interrupt()或者AsyncTask.cancel()方法,但是这不会马上中断线程,因此,只能在自己的线程中实现中断并退出。

    在许多情况下,后台运行的线程都有一个主循环,因此你可以在循环中判断线程是否被中断,若被中断,则退出循环,从而结束进程。例如一个线程下载线程,可以通过isInterrupted()方法判断当前线程是否被中断。

thread = new Thread() {
  
public void run() {
    
    
while(!isInterrupted() && hasMoreDataToDownload()){
      downloadAndWriteSomeMore();
    }
    
if(isInterrupted()){
      deleteThePartiallyDownloadedFile();
    }
else{
      callBack();
    }
  }
}
thread.start();
thread.interrupt();

 

    如果线程被中断,则调用deleteThePartiallyDownloadedFile()函数,删除没有完成下载的文件。当线程没有被中断,则调用callBack()函数,可以使用handler发送下载完成的信息。

    如果你的线程中没有这样一个主循环,例如只是执行一个很耗时的SQL查询操作,可以在查询操作之后调用 isInterrupted()来判断是否需要结束线程。

    文章翻译自:http://www.helloandroid.com/tutorials/interruptingcancelling-threads



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值