正在運行的AsyncTask的.cancel(boolean)方法如何工作?以下是文檔:取消AsyncTask
嘗試取消執行此任務。如果任務已完成,已被取消或因其他原因無法取消,此嘗試將失敗。如果成功,並且此任務在調用取消時尚未開始,則此任務不應運行。如果任務已經開始,則mayInterruptIfRunning參數確定執行此任務的線程是否應該中斷以試圖停止任務。
調用此方法將導致在doInBackground(Object [])返回後,在UI線程上調用onCancelled(Object)。調用此方法可確保永不調用onPostExecute(Object)。調用此方法後,應該從doInBackground(Object [])中定期檢查isCancelled()返回的值,以儘早完成任務。
第二段意味着由程序員在取消調用後(通過定期檢查isCancelled())儘快從doInBackground方法返回。但在測試中,我的AsyncTask(doInBackground方法)似乎會立即停止,即使我不這樣做,但在調用cancel之後。有誰能解釋這個嗎? (當調用cancel時,Logcat不顯示任何事情,順便說一句)。
protected Void doInBackground(Void... V) {
for (int v=3;v>0;v--){
publishProgress(v);
try {Thread.sleep(1500);} catch (InterruptedException e) {}
}
return null;
}
而且,這種情況無論mayInrerruptIfRunning所提供的價值,因此,如果它能夠解釋該值所在進來,那也將非常讚賞。
正確的方法取消和android中的asynctask http://www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ – 2016-06-29 17:07:38