2013-01-03 40 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