J'ai une activité qui héberge des fragments. appuyer sur un bouton va du fragment A au fragment B en passant par un FragmentTransaction et l'ajout à la pile arrière. Maintenant, le fragment B a une implémentation AsyncTask qui charge les images d'une carte SD et la publie au fur et à mesure du chargement d'une image. Si j'appuie sur le bouton Retour, mon application se bloque. . Le rapport d'erreur indique que la tâche asynchrone est le problème car il était encore en chargement lorsque le bouton Précédent a été pressé, alors ma question est, comment puis-je arrêter la tâche asynchrone lorsque le bouton Précédent a été pressé pour retourner au précédent fragment/activité? .. Merci.Stop AsyncTask in Fragments lorsque le bouton Précédent est enfoncé
Répondre
Remplacer la onStop() de votre fragment et faire:
protected void onStop() {
super.onStop();
//check the state of the task
if(task != null && task.getStatus() == Status.RUNNING)
task.cancel(true);
}
Il suffit d'appeler ce code dans le onBackPressed() -method de votre activité d'hébergement - même pour un fragment via onDestroy():
if(myFancyAsyncTask != null && myFancyAsyncTask.getStatus() == Status.RUNNING) {
myFancyAsyncTask.cancel(true);
}
Cela annulera une asyncTask en cours d'exécution pour vous. Assurez-vous de vérifier en l'AsyncTask si elle n'a pas été annulé en utilisant le cycle de vie des méthodes:
protected void onPostExecute(Long result) {
if(!isCancelled()) {
// do your work
}
}
Je vous conseille fortement de voir this cycle de vie du fragment pour éviter les confusions futures. Et dans votre cas, je pense que vous devez remplacer la méthode onPause pour terminer la asyncTask.
@Override
protected void onPause() {
super.onPause();
//check the state of the task
if(task != null && task.getStatus() == Status.RUNNING)
task.cancel(true);
}
AsyncTaskRunner doAsynchronousTask; //Before onCreateView
//in onCreateView()
doAsynchronousTask = new AsyncTaskRunner();``
doAsynchronousTask.execute();
// after onCreateView()
@Override
public void onStop() {
super.onStop();
doAsynchronousTask.cancel(true);
}
Je pense que ce serait mieux si vous ajoutez une explication à votre réponse afin qu'elle soit plus facile à comprendre. – Keale
Déclare la méthode AsyncTask globalement. exécutez cette tâche asynchrone dans votre méthode oncreatview() ou onActivityCreated(). Enfin, copiez simplement la méthode onStop() –
Annulation du AsyncTask dans onStop() n'est pas un très bon choix, car il peut arrêter le AsyncTask dans les scénarios où vous voulez qu'il continuer à courir. Imaginez que vous ayez un fragment/une activité où vous montrez plusieurs images téléchargées sur le net et si vous appuyez sur une image, vous êtes censé amener l'utilisateur à une autre application spécifique à l'image. Cela ferait en sorte que votre fragment apparaisse surStop() et annulera votre AsyncTask même s'il reste des images que vous souhaitez télécharger lorsque l'utilisateur revient à l'activité. Je pense que le faire dans onDestroy() est un meilleur choix.
@Override
public void onDestroy() {
super.onDestroy();
if(doTask != null){
doTask.cancel(true);
}
}
- 1. Android - Stop AsyncTask lorsque le bouton de retour est enfoncé et retourne à l'activité précédente
- 2. Comment tuer une activité lorsque le bouton Précédent est enfoncé?
- 3. pop plus d'une vue lorsque le bouton Précédent est enfoncé?
- 4. Le typage automatique ne s'arrête pas lorsque le bouton "Stop Spam" est enfoncé
- 5. Tâche d'arrêt asynchrone lorsque le bouton de retour est enfoncé
- 6. onPause non appelée lorsque le bouton de retour est enfoncé?
- 7. Android: invite l'utilisateur à enregistrer les modifications lorsque le bouton Précédent est enfoncé
- 8. Fin de l'activité lorsque le bouton Précédent est enfoncé (Boîte de dialogue Alerte)
- 9. La vue MPMoviePlayerController disparaît lorsque le bouton suivant/précédent est enfoncé
- 10. Comment terminer le processus lorsque le bouton d'accueil est enfoncé?
- 11. Le son s'arrête lorsque le bouton est à nouveau enfoncé
- 12. Mise à jour du tiroir de navigation (avec DrawerLayout) lorsque le bouton de retour est enfoncé
- 13. déclencheur lorsque le bouton de formulaire est enfoncé
- 14. Faire un arrêt sonore lorsque le bouton est enfoncé iOS
- 15. JTextField change automatiquement la valeur lorsque le bouton est enfoncé
- 16. Comment ignorer UIAlertView lorsque le bouton d'accueil est enfoncé?
- 17. Dans WPF: comment désactiver l'animation lorsque le bouton est enfoncé?
- 18. Effectuer une action lorsque le bouton est enfoncé?
- 19. Android Annuler un événement lorsque le bouton Annuler est enfoncé
- 20. Compteur incrément/décrémentation lorsque le bouton est enfoncé
- 21. Déclencher événement lorsque le bouton est enfoncé dans Android
- 22. Comment appeler la deuxième classe lorsque le bouton est enfoncé?
- 23. Comment tuer une activité lorsque le bouton Accueil est enfoncé?
- 24. Java: Lecture du port COM lorsque le bouton est enfoncé
- 25. Ouvrir l'image suivante lorsque le bouton est enfoncé dans Android
- 26. Comment terminer() une activité lorsque le bouton Accueil est enfoncé
- 27. Cocoa Programming - MouseEntrée lorsque le bouton est enfoncé?
- 28. Avoir plusieurs commandes lorsque le bouton est enfoncé
- 29. CABasicAnimation disparaît lorsque le bouton Home est enfoncé
- 30. Application Stop si j'appuie sur le bouton Précédent dans Android
-vous dire sur le fragment contenant le AsyncTask droit? .. Eh oui, – irobotxxx
le fragment .. Merci – Nermeen
ça marche! – irobotxxx