web-dev-qa-db-fra.com

Android dormir () sans bloquer l'interface utilisateur

Pour ma nouvelle application Android, j'ai besoin d'une fonction qui expire mon application pendant 3 secondes. J'ai essayé la fonction "sleep ()" comme ceci:

seekBar1.setProgress(50);                // Set something for my SeekBar

try{
   Thread.sleep(3000);                   // Wait for 3 Seconds
} catch (Exception e){
   System.out.println("Error: "+e);      // Catch the exception
}

button.setEnabled(true);                 // Enable my button

Cela semble fonctionner, mais si j'exécutais l'application, il le fait comme suit: attendez 3 secondes, définissez la progression et activez le bouton. Je veux d'abord définir la progression et ensuite attendre 3 secondes et ensuite seulement pour activer le bouton.

Est-ce que "sleep ()" convient à mon usage ou que puis-je faire si mon application le fait dans le bon ordre?

15
Pascal Ackermann

Vous pouvez utiliser la méthode postDelayed() comme ceci:

handler=new Handler();
Runnable r=new Runnable() {
    public void run() {
        //what ever you do here will be done after 3 seconds delay.              
    }
};
handler.postDelayed(r, 3000);
29
Mohammad Arman

Vous ne devriez jamais bloquer le fil d'interface utilisateur en dormant. Son ok pour dormir sur un autre thread, mais même alors, il devrait être évité. Pour ce faire, vous pouvez poster un Runnable dans un gestionnaire. Ensuite, mettez le code que vous voulez exécuter après le délai dans la méthode run () du Runnable.

2
Gabe Sechan

Vous pouvez définir une Handle dans votre activité et utiliser Handle.postDelayed() à partir de onCreate() de l'activité pour recevoir un message sur ce descripteur en 3 secondes. Lors de la réception, vous pouvez activer le bouton.

Vous pouvez faire la même chose en utilisant AsyncTask où dans doInBackground() vous ne dormez que pendant 3 secondes. Ensuite, dans onPostExecute(), vous activez le bouton.

1

Utilisez l'objet de la classe Handler et utilisez la méthode handler.postDelayed (thread, time). N'utilisez pas sleep (), il bloquera le thread ui.

1
Prinz Km