J'ai un problème avec la classe AsyncTask. Il semble que ma tâche cesse de fonctionner après avoir créé 4 ou 5 tâches.AsyncTask doInBackground ne s'exécute pas
Im ayant 2 activités. MainActivity qui ne contient qu'un bouton qui lance une seconde activité appelée ImageActivity.
ImageActivity est très simple. il a un onCreate qui définit la mise en page, puis il démarre une nouvelle asyncTask qui charge une image à partir d'Internet. Cela fonctionne bien les premières fois. Mais que ça cesse soudainement de fonctionner. La méthode onPreExecute est exécutée à chaque fois, mais pas la méthode doInBackground. J'ai essayé de simplifier le doInBackground avec une boucle de sommeil, et la même chose arrive. Je ne peux pas comprendre ce comportement puisque l'asynctask est à la fois annulé et mis à null dans la méthode onDestroy. Donc, chaque fois que je lance une nouvelle ImageActivity, je crée aussi une nouvelle AsyncTask.
Je recréer l'ImageActivity et la tâche en appuyant sur le bouton Précédent, puis en cliquant sur le bouton MainActivity.
Vous avez des idées? Je me bats vraiment avec celui-ci.
MISE À JOUR: Le code qui commence le ImageActivity (dans un bouton onClickListener)
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
intent.setClassName(this, ImageActivity.class.getName());
startActivity(intent);
Le code commence au-dessus de cette activité
public class ImageActivity extends Activity {
private AsyncTask<Void, Void, Void> task;
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.main);
task = new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute()
{
Log.d(TAG, "onPreExecute()");
}
@Override
protected Void doInBackground(Void... params)
{
Log.d(TAG, "doInBackground() -- Here is the download");
// downloadBitmap("http://mydomain.com/image.jpg")
return null;
}
@Override
protected void onPostExecute(Void res)
{
Log.d(TAG, "onPostExecute()");
if(isCancelled()){
return;
}
}
}.execute();
}
@Override
protected void onDestroy()
{
super.onDestroy();
task.cancel(true);
}
}
MISE À JOUR:
Je l'ai testé en utilisant une combinaison de Threads traditionnels et la méthode runOnUiThread, et il semble fonctionner mieux. Maintenant, le thread s'exécute à chaque fois.
Postez votre code. Comment l'appelez-vous. Nous n'avons aucune idée de comment vous aider sans code – Falmarri
Ayant exactement le même problème, après avoir démarré plusieurs AsyncTasks dans mon application, l'application ne s'exécute que jusqu'à onPreExecute(), mais ne saisit pas doInBackground(). Essayer votre approche Thread maintenant .. –
Je rencontre le même problème. La chose étrange est que cela varie d'un appareil à l'autre. Il se produit sur une tablette (Android 4.0), mais un téléphone (Android 2.3.4) exécutant exactement le même code ne l'a pas. – Hong