2011-06-24 46 views
1

我有一個AsyncTask運行一個循環,它只在退出應用程序時停止循環,全局「停止」布爾值被設置並停止循環並通過AsyncTask完成。Android退出AsyncTask

我有這樣的代碼:

@Override 
public void onBackPressed() 
{ 
    KillAllThreads(); 
} 

@Override 
public void onUserLeaveHint() 
{  
    KillAllThreads();  
} 

現在這裏是東西。如果我啓動AsyncTask,onUserLeaveHint()立即被調用,並且當home按鈕被按下時,它永遠不會觸發這個方法。如果我不啓動AsyncTask並讓該活動加載而不做任何事情,那麼當我按Home時,它會觸發onUserLeaveHint()方法。

我應該如何停止線程,如果用戶點擊了應用程序?

回答

2

你應該可以在AsyncTask上調用.cancel(),你試過嗎?

看一看我的谷歌文檔此示例項目,它說明的AsyncTask的重要方面:開始任務,出版進步等

  • 它顯示瞭如何取消正在運行的任務

    • 它顯示了當您的活動暫停或停止時如何取消正在運行的任務。

    鏈接:從那裏

    https://docs.google.com/leaf?id=0BwAnjRVwT4WzOWMwYjFhNTctOTUxYy00NjQwLTgwNWEtMmE5MzEyZWQ3NjUx&hl=en_US&authkey=CLnH8_ID

  • +0

    電話.cancel?我也嘗試在onStop()中調用myTask.cancel(true),它只是崩潰。 – Jesse

    +0

    嘗試調用cancel(false)false表示正在進行的任務被允許完成,調用此操作可保證不會調用onPostExecute(...)。您應該定期從doInBackground(...)檢查由isCancelled()返回的值以完成任務。基本上當你調用cancel時,它意味着isCancelled()是真的,所以添加一行「if(isCancelled())break;」到你的doInBackground()方法中。 – Kenny

    +0

    嘗試在onStop,myTask.cancel(false);崩潰馬上 – Jesse