您intereset在asyncTask.cancel(true)
,在其實際參數傳遞true,如文檔住宿:
mayInterruptIfRunning真,如果執行此任務的線程應該被中斷;否則,正在進行的任務被允許完成。
那麼你AsyncTask.doInBackground裏面你可以try/catch語句如下 - 但是這需要你有阻斷拋出InterruptedException電話,否則,你需要經常檢查isCancelled()時間:
@Override
protected Void doInBackground(Void... params) {
try {
/// do work,
} catch (InterruptedException e) {
if (isCancelled()) {
// cancel(true) called, dont touch UI!
}
}
return null;
}
此外,它的安全檢查是在onPostExecute()
開始isCancelled()。
當它達到onPostExecute並希望與UI交互
,它崩潰
這就是另外一個問題,如果你的內心AsyncTask
與GUI交互,我建議首先:使你的AsyncTask一個靜態類,將對Activity或Fragment的引用傳遞給AsyncTask構造函數,然後將其存儲爲WeakReference<MyActivity> actRef
。那麼當你需要它時使用if(actRef.get()!= null){//使用它。 }。通過這種方式,您需要泄漏對您的活動/片段的引用或使用無效的UI對象。
使用'myAsynTask.cancel(真);' – KOTIOS 2014-10-06 12:35:00
他已經這樣做了。這個問題不是重複的。 – konmik 2014-10-07 07:41:05