2013-01-03 37 views
-1

在我的应用程序中,我正在使用asynctask进行操作。但是我也使用处理程序在超时情况下取消我的任务。处理程序无法取消更高api中的asynctask

这是我的操纵器

Handler mHandler = new android.os.Handler() { 

     @Override 
     public void handleMessage(Message msg) { 
      task.cancel(true); 
     } 
    }; 

    Message msg = new Message(); 
    msg.arg1 = 0; 
    mHandler.sendMessageDelayed(msg, 1000); 

,这是我的AsyncTask开始

final findIpTask task = new findIpTask(1, 2); 
    task.execute(); 

,并在我的AsyncTask我有

protected void onCancelled() { 

     running = false; 
     dialog.dismiss(); 
        //some alert dialog for time-out 

在2.33模拟器它工作正常。但是当我在4.0模拟器上运行我的应用程序时,它不会停止。有人知道为什么并且有解决方案。

回答

0

您的AsyncTask由于没有停止或处理程序线程的cancle而停止。

而不是使用处理程序使用TIMER线程,你可以停止你的线程和asyncTask。如下面的代码片段所示。

Timer myTimer = new Timer(); 
    myTimer.schedule(new TimerTask() { 
    @Override 
    public void run() { 
//Your Stuffs 
} 
    }, 0, 1000); // put your delay here 


if(ButtonStopped == true){ 
    myTimer .cancel(); 
    myTimer .purge(); 
    //your stuffs 
    task.cancle();// call here for stopping your asyncTask 
    }else{ 
     //your stuffs 

      } 

for more info go to this android developer link.

希望这将尽力帮助你。

+0

并设置超时时间如何? – kaplanfat

+0

已更新片段.. –

+0

buttonstopped?它是从哪里来的?另外,我要把我的task.execute运行(){}?那么我何时会打电话给mytimer.cancel?以及在timer.purge – kaplanfat