Vous devez utiliser une tâche asynchrone. Cette classe est destinée aux tâches d'arrière-plan de longue durée qui publient des mises à jour et s'exécutent automatiquement sur le fil d'exécution de l'interface utilisateur.
En doInBackground
et vous avez votre boucle qui appellera alors publishProgress
qui appellera onProgressUpdate
toutes les 100 ms avec les nouvelles valeurs.
Cela se fera en arrière-plan et onProgressUpdate s'exécutera automatiquement sur le thread de l'interface utilisateur.
Quelque chose comme.. :
private class ShowLoading extends AsyncTask<Void, Integer, Void> {
@Override
protected Void doInBackground(Void... params) {
for (int i = 0; i < 3500; i++){
publishProgress(i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
if (values[0]%3 == 0){
textview.setText ("Loading.");
} else if (values[0]%3 == 1){
textview.setText ("Loading..");
} else if (values[0]%3 == 2){
textview.setText ("Loading..");
}
}
}