2010-11-29 34 views
0

J'ai besoin d'écrire une méthode d'aide que je peux utiliser à divers endroits dans l'application pour essentiellement le faire «dormir» pour N milliseconds.Il semble que Handler.postAtTime peut être une façon de le faire, mais je voudrais tout extraits de code si disponibles.Android 2.2: Comment pouvez-vous écrire une méthode d'assistance pour que votre application «dorme» pendant N millisecondes?

+1

Est c'est le thread principal de l'application qui doit être mis en veille pendant N millisecondes? que voulez-vous dire en faisant app pour dormir? –

+2

Vous ne devez pas mettre l'application en veille, en particulier pas le thread principal de l'interface utilisateur. Cela affectera le dessin de l'interface utilisateur et rendra peut-être votre application léthargique. –

+0

Je suis avec Suresh - nous avons besoin de plus d'informations pour vous aider. Retarder l'opération X pour Y ms serait facile, mais cela laisserait les autres opérations ui et les processus d'arrière-plan se poursuivre normalement. Alternately vous pouvez regarder ou vérifier quelque chose chaque N ms, qui est également faisable. Nous avons juste besoin d'en savoir plus. Comme je l'ai dit à Spencer ci-dessous, vous ne devriez pas mettre votre thread manin en veille car il gèlera l'interface utilisateur Android, irrite les utilisateurs et peut provoquer des avertissements FC. – Eddie

Répondre

1

Vous cherchez quelque chose comme ça?

try { 
    //Put the thread to sleep for the desired amount of time (milliseconds) 
    Thread.currentThread().sleep(1000); 
} 
catch(InterruptedException ie){ 

} 

Ceci mettra le thread que vous appelez en veille pendant la durée que vous spécifiez.

+2

Je voudrais mettre en garde contre cette méthode. Le framework Android déconseille fortement de verrouiller le thread de l'interface utilisateur à tout moment, ce qui est essentiellement ce que fait votre code. – Eddie

+0

+1 Eddie. Oui, il ne faut jamais 'dormir()' le thread principal de l'interface utilisateur. C'est une très mauvaise pratique. –

+0

Sur le plan positif, cela fonctionne. Du côté négatif, on dirait que "il y a un meilleur moyen, s'il vous plaît faites le moi savoir. – charlest

5

Vous n'avez pas dit pourquoi vous avez besoin de votre application pour "dormir".

En supposant que vous devez exécuter une tâche après un certain temps:

Handler h = new Handler(); 
h.postDelayed(new Runnable() { 
    public void run() { 
     // do something here 
    } 
}, 1000); // 1000 ms delay 
+0

La raison pour laquelle je dois faire ceci est que je veux afficher un message sur l'écran, l'afficher pendant 60 secondes, puis afficher un autre message. Il n'y a rien de précis pendant les 60 secondes que j'attends de terminer, donc AsyncTask ne semble pas s'appliquer. – charlest

+0

Faire un sommeil (60000) dans l'asynctask? –

+0

Ne créez pas un nouveau gestionnaire chaque fois que vous postez un message, mais à part cela, c'est l'approche que vous souhaitez. – adamp

2

Si vous ne me dérange pas bloquer le thread, une alternative à Thread.sleep() est SystemClock.sleep().

Avantage est que c'est un one-liner, car il ignore le InterruptedException de sorte que vous n'avez pas besoin de le gérer.

Plus d'infos sur http://developer.android.com/reference/android/os/SystemClock.html.

Comme nous l'avons dit, vous devriez éviter d'appeler cela sur le thread principal de l'interface utilisateur, car cela fera votre application ne répond plus et montrer potentiellement la boîte de dialogue redoutée nous détestons voir (s'il vous plaît attendre ou forcer près.)