2011-12-30 87 views
0

在onPause裏面,我調用了名爲PlayTask的AsyncTask上的cancel(true)。但是,當我點擊進行另一項活動時,它仍然愉快地繼續。爲什麼我的電話取消不被尊重?AsyncTask.cancel不受尊重。爲什麼?

僅供參考,這裏是事件的順序:

CreateTrackActivity: btnPlay clicked 
CreateTrackActivity: getting player for track 
BasePlayerActivity : playing trac  
BasePlayerActivity : Track playing 
BasePlayerActivity : onPAUSE 
BasePlayerActivity : play task cancelled 
BaseActivity: onCreate 
BasePlayerActivity: track received 
BasePlayerActivity: track prepared 
BasePlayerActivity: track setup finished 

回答

2

還有,當你嘗試做asyncTask.cancel(真正的)一些意想不到的原因。

  1. 如果任務尚未開始運行,則會取消。
  2. 如果任務已經啓動,並使用asyncTask.cancel(true),那麼仍然有一個 的機會,任務不會中斷。你可以檢查取消(真)返回給你什麼。

所以,cancel(true)不一定會停止doInBackground()的執行。如果cancel(true)返回true,則意味着該任務不會運行onPostExecute()。

所以,你必須在doInBackground()中定期檢查isCancelled()。

+0

很酷。謝謝!!!!!!!!!! – hunterp 2011-12-30 03:06:21

+0

我認爲這是不好的語義。取消是一個動詞,它應該意味着取消,而不是「警告doInBackground檢查取消」 – hunterp 2011-12-30 03:36:59

+0

XD學會忍受它 – 2011-12-30 03:53:20

相關問題