2012-11-27 137 views
8

我想知道什麼是停止異步任務frm運行的最佳方法。Android異步任務取消/停止

我已經試過

@Override protected void onCancelled() { 
     super.onCancelled(); 
     mTask.cancel(true);  
} 

我也試過

asyncTaskObject.cancel(true); 

時,與事件相關的這工作特別。

但假設情況是---有4個AsyncTask。首先撥打第二個,第二個撥打第三個和第三個電話第四個。當用戶輸入活動時,沒有對話框。否則,我們可以在那裏使用onCancel方法。 當用戶點擊頁面上的任何位置時,如果用戶沒有點擊任何地方,就會出現對話框,則不顯示對話框,但異步任務繼續在後臺運行。假設用戶點擊「後退」按鈕或導航圖標主頁user.is被取出當前活動。但異步任務繼續在後臺運行,並最終導致應用程序崩潰。我已經習慣了onBackPressed中的cancel方法。但問題是你不能確定哪個任務正在運行,應用程序再次運行。

這是什麼方法?

回答

12

保持引用的AsyncTask對象實例變量,然後在的onDestroy()做到這一點

@Override 
protected void onDestroy() { 
    if (mTask != null) { 
     mTask.cancel(true); 
    } 

    super.onDestroy(); 
} 
+0

'mTask''' null' follow this http://stackoverflow.com/a/34586053/1318946 –

0

我不能完全肯定,當你想取消你的任務,但這裏有一些建議:1)保持對正在運行的每個任務的引用。 b)在你的對話框中添加一個解僱監聽器並取消所有任務(如果這是你想要做的)。 c)在onStop回調你的活動時取消所有任務(如果這是你想要做的事情)。