Je suppose que vous lancez une tâche qui demande beaucoup de temps à partir d'une boîte de dialogue, puis piégeant la sortie du fil dans votre gestionnaire lorsque vous essayez de fermer la boîte de dialogue. Si possible, pensez simplement à envoyer un message vide lorsque la boîte de dialogue est terminée. Ensuite, dans le gestionnaire créer un nouveau AsyncTask comme:
private class MyAsynch extends AsyncTask<String, Void, String>{
protected void onPreExecute() {
resetProgress();
progress.show();
}
@Override
protected String doInBackground(String...strings) { // <== DO NOT TOUCH THE UI VIEW HERE
// TODO Auto-generated method stub
doNonUIStuff();
return someString; // <== return value String result is sent to onPostExecute
}
protected void onPostExecute(String result){
progress.dismiss();
doSomethingWithString(result); // you could launch results dialog here
}
};
protected void onPause() {
super.onPause();
if (asynch != null) {asynch.cancel(true);}
if (progress != null){progress.cancel();}
}
private void resetProgress() { // avoid frozen progress dialog on soft kill
if (progress != null && progress.isShowing()){
progress.cancel();
}
progress= new ProgressDialog(this);
progress.setIndeterminate(true);
progress.setMessage("I am thinking.");
}
Vous pouvez retourner tout type dans onPostExecute, dans cet exemple, je retourne une chaîne. Une autre approche consiste à lancer une seconde activité en tant que "dialogue" en utilisant startActivityForResult pour créer la tâche AsycnTask dans onActivityResult. En d'autres termes, rassemblez les données dans une boîte de dialogue ou une seconde activité, puis dans la première activité, affichez une boîte de dialogue de progression dans onPreExecute, exécutez la tâche intensive en arrière-plan et annulez la boîte de dialogue de progression dans onPostExecute.
J'ai vu la bille tournante gelée, donc l'appel à resetProgress().
J'essaye votre solution sa dose encore ne fonctionne pas la roue reste immobile – joula