J'ai un petit problème avec AsyncTask.Tâche d'arrêt asynchrone lorsque le bouton de retour est enfoncé
je l'ai mis en œuvre comme suit
private class MakeConnection extends AsyncTask<String, Void, String> implements OnDismissListener{
Context context;
ProgressDialog myDialog;
public MakeConnection(Context conetext)
{
this.context = conetext;
myDialog = new ProgressDialog(this.context);
myDialog.setCancelable(true);
myDialog.setOnDismissListener(this);
}
@Override
protected String doInBackground(String... urls) {
//do stuff
}
@Override
protected void onPostExecute(String result) {
try {
myDialog.dismiss();
success(result);
}catch(JSONException e)
{
data = e.toString();
}
}
@Override
protected void onProgressUpdate(Void... values) {
myDialog = ProgressDialog.show(context, "Please wait...", "Loading the data", true);
}
@Override
public void onDismiss(DialogInterface dialog) {
this.cancel(true);
}
}
Mais chaque fois que je presse le rien bouton de retour se produit, il effectue un peu la tâche comme si je ne pas appuyer sur le bouton de retour
Toute idée pourquoi ?
J'ai une question à ce sujet maintenant, j'ai mis en œuvre comme vous le suggérez, mais ce que je veux savoir est dois-je capturer l'événement de bouton de retour dans le thread UI principal ou seulement dans la méthode AsyncTask onDesmiss? Parce que quand j'ai une connexion lente, je peux annuler le AsyncTask avec l'implémentation en cours – Armand
Vous devriez annuler 'AsyncTask' dans' onDestroy() 'de Activity. Lorsque la tâche est annulée, 'onPostExecute()' ne sera pas appelé. Dans votre cas, la tâche va traîner pendant un certain temps, mais une fois terminée, 'AsyncTask.onCancelled()' est appelé (vous pouvez le remplacer, bien sûr). Vous devriez faire attention seulement dans cette fonction (ou simplement ne pas toucher l'interface utilisateur de 'onCancelled()'), car il peut être appelé après que l'activité soit déjà détruite. – inazaruk
Ok, si je laisse l'activité ouverte pendant un certain temps et que l'écran se verrouille, puis déverrouille et recommence à l'utiliser, et essaye de démarrer une nouvelle activité avec un AsyncTask, ça ouvre ma boîte de dialogue et rien d'autre ne se passe. – Armand