Android AsynTask 如何取消?


一个很重要的事情,以前使用AsynTask从来没有主动调用过取消,现在遇到了一个问题,就想着如何取消呢?

下面都是网上看到的一些理解,不过最好还是自己亲自实验后再决定如何做。

最后我决定在Fragment的onDesdroy() 方法中,这样处理:

   

 @Override
    public void onDestroy() {
        super.onDestroy();
        if (mGetFileLength != null && !mGetFileLength.isCancelled()) {
            mGetFileLength.cancel(true);
        } 
    }


----------------------------------------------------------------------------------------------------


AsyncTask无法用Cancel函数关掉.
如果AsyncTask正执行Sleep时,调用cancel方法,会产生异常InterruptedException.
如果希望能中途关掉AsyncTask,最好设置一个标志位,然后在doinbackground()里去查询这个标志.

一个AsyncTask对象只能执行一次,想执行第二次,必需重新创建.

-------------------------------------------------------------------------------------------------------

在java的线程中,没有办法停止一个正在运行中的线程。在Android的AsyncTask中也是一样的。如果必须要停止一个线程,可以采用这个线程中设置一个标志位,然后在线程run方法或AsyncTask的doInBackground方法中的关键步骤判断这个标志位以决定是否继续执行。然后在需要终止此线程的地方改变这个标志位以达到停止线程的目的。

 

   从外部调用AsyncTask的cancel方法并不能停止一个已经启动的AsyncTask。这个cancel方法的作用与线程的interrupt方法相似,调用了一个线程的interrupt方法之后线程仍然运行,但是如果该线程的run方法里面调用过sleep的或者wait方法后,处于sleep或wait状态,则sleep和wait立即结束并且抛出InterruptedException异常。AsyncTask的cancel方法也一样,如果在这个Task的doInBackground方法中调用了sleep或wait方法,当在UI线程中调用了这个Task实例的cancel方法之后,sleep或wait立即结束并且抛出InterruptedException异常,但是如果捕获该异常的代码后面还有其他代码,则这些代码还会继续执行。

------------------------------------------------------------------------------------------------------------


http://hi.baidu.com/justtmiss/item/e67ebf5a964ed4cad2e10cf0

http://www.cnblogs.com/tt-0411/archive/2012/03/25/2410830.html

http://blog.csdn.net/cynhafa/article/details/6860201





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值