2011-12-30 6 views
0

onPauseの中で、PlayTaskというAsyncTaskでcancel(true)を呼び出しています。しかし、私が別のアクティビティをクリックすると、それはやっかいになります。私の呼び出しが尊重されないのはなぜですか?AsyncTask.cancelは尊重されません。どうして?

FYI、ここでの一連のイベントです:

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(true)を実行しようとするとき、いくつかの予期しない理由があります。

  1. タスクが実行を開始していない場合は、キャンセルされます。
  2. タスクが開始されていて、asyncTask.cancel(true)を使用している場合、タスクは中断されずに のチャンスが残っています。キャンセル(真)があなたに返すものを確認することができます。

so、cancel(true)はdoInBackground()からの実行を必ずしも停止しません。 cancel(true)がtrueを返すと、タスクはonPostExecute()を実行しないことを意味します。

したがって、doInBackground()でisCancelled()を定期的にチェックする必要があります。

+0

Cool。ありがとう!!!!!!!!!! – hunterp

+0

これは悪い意味論だと思います。キャンセルは動詞であり、キャンセルを意味するはずです。「キャンセルを確認する警告doInBackground」ではありません。 – hunterp

+0

XDはそれと一緒に暮らすことを学びます。 –