Meilleure façon d'effectuer une action périodiquement [alors qu'une application est en cours d'exécution] - Handler?
Je suis en train d'effectuer une action régulièrement. Je veux créer une nouvelle instance d'une classe après, de dire, de plus de 3 secondes. Serait-il préférable de mettre en œuvre ce à l'aide d'un Gestionnaire ou d'un Fil? Est-il plus facile, un peu simplet que j'ai pu essayer? Je ne suis vraiment pas bon à l'aide de threads - je veux apprendre, mais il est plus important pour moi d'avoir cette fonction avant de s'inquiéter au sujet des bonnes pratiques de programmation.
new Thread(){
public void run(){
//makes sure the player still has 3 lives left
while(game == false){
uiCallback.sendEmptyMessage(0);
try {
Thread.sleep(2000); //wait two seconds before drawing the next flower
} catch (InterruptedException e) {
//TODO Auto-generated catch block
e.printStackTrace();
} //sleep for 2 seconds
}
}
}.start();
source d'informationauteur Hani Honey
Vous devez vous connecter pour publier un commentaire.
Je suis en train de faire quelque chose de semblable dans mon application android; - je mettre à jour certaines données dans mon interface toutes les 10 secondes. Il y a beaucoup de façons de le faire, mais j'ai choisi d'utiliser un
Handler
car il est très simple à mettre en œuvre:Comme vous le savez, vous ne pouvez pas exécuter des fonctions périodiques de ce genre dans le thread de l'INTERFACE utilisateur, car il permet de bloquer l'INTERFACE utilisateur. Cela crée un nouveau
Thread
qui envoie un message à l'INTERFACE utilisateur quand il est fait, de sorte que vous pouvez mettre à jour votre INTERFACE utilisateur avec les nouveaux résultats quelle que soit votre fonction périodique.Si vous n'avez pas besoin de mettre à jour l'INTERFACE utilisateur avec les résultats de cette fonction périodique, vous pouvez tout simplement ignorer la seconde moitié de mon exemple de code, et viens de pondre une nouvelle
Thread
comme indiqué. Attention toutefois: si vous modifiez les variables partagées par cette nouvelleThread
et de l'INTERFACE utilisateur, vous allez rencontrer des problèmes si vous n'avez pas synchroniser. En général, le filetage n'est pas une zone où vous voulez ignorer les "bonnes pratiques de programmation" parce que vous obtiendrez étrange, non prévisible des erreurs et vous serez en maudissant votre programme.-tjw
La chose la plus simple est d'utiliser
postDelayed()
sur unView
(par exemple, un widget) pour planifier uneRunnable
qui ne fonctionne pas, puis reporte lui-même.