2011-12-30 6 views
0

À l'intérieur d'onPause, j'appelle cancel (true) sur la tâche AsyncTask appelée PlayTask. Cependant, ça continue quand je clique sur une autre activité. Pourquoi mon appel à annuler n'est-il pas respecté?AsyncTask.cancel non respecté. Pourquoi?

Pour votre information, voici la séquence des événements:

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 

Répondre

2

Il y a quelques raisons inattendues lorsque vous essayez de faire asyncTask.cancel (true).

  1. Si la tâche n'a pas commencé à s'exécuter, elle s'annulera.
  2. Si la tâche a démarré et que vous utilisez asyncTask.cancel (true), vous avez encore chances que la tâche ne soit pas interrompue. Vous pouvez vérifier ce que cancel (true) renvoie pour vous. Donc, cancel (true) n'arrête pas forcément l'exécution de doInBackground().

Si cancel (true) renvoie true, tout signifie que la tâche n'exécutera pas onPostExecute(). Donc, vous devez vérifier régulièrement isCancelled() dans doInBackground().

+0

Cool. Merci!!!!!!!!!! – hunterp

+0

Je pense que c'est une mauvaise sémantique. Annuler est un verbe et il devrait signifier annuler, pas "alerte doInBackground pour vérifier l'annulation" – hunterp

+0

XD apprendre à vivre avec –

Questions connexes