Ce code tente d'implémenter une minuterie dans Android à l'aide d'un thread, mais rencontre des problèmes dus à la synchronisation des threads. Pour clarifier, ce code définit un compte à rebours de 5 minutes jusqu'à 0h00.
Sous Android, vous ne pouvez pas manipuler l'interface utilisateur à partir d'un thread autre que le thread principal (thread UI). Dans ce cas, le fil de discussion créé par Thread t tente de mettre à jour directement TextView (élément UI), ce qui entraînera une erreur.
Pour résoudre ce problème, vous disposez de plusieurs options :
1. CountDownTimer
CountDownTimer est une classe Android qui simplifie l'implémentation de la minuterie. Il vous permet de programmer un compte à rebours avec une durée et un intervalle spécifiés.
Exemple :
<code class="java">new CountDownTimer(300000, 1000) { @Override public void onTick(long millisUntilFinished) { // Update UI on the main thread runOnUiThread(new Runnable() { @Override public void run() { tv.setText("You have " + millisUntilFinished + "ms"); } }); } @Override public void onFinish() { // Update UI on the main thread runOnUiThread(new Runnable() { @Override public void run() { tv.setText("DONE!"); } }); } }.start();</code>
2. Handler
Handler est une classe qui permet de poster des tâches à exécuter sur le thread principal. Cela garantit que les mises à jour de l'interface utilisateur sont toujours effectuées sur le bon fil de discussion.
Exemple :
<code class="java">final Handler handler = new Handler(); final Runnable runnable = new Runnable() { @Override public void run() { // Update UI on the main thread tv.setText("Updated UI"); } }; handler.postDelayed(runnable, 1000); // Post task to be executed in 1 second</code>
3. Timer
Timer est une classe qui vous permet de planifier des tâches sur un thread séparé. Cependant, vous devez toujours mettre à jour l'interface utilisateur sur le fil de discussion principal.
Exemple :
<code class="java">Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { // Update UI on the main thread runOnUiThread(new Runnable() { @Override public void run() { tv.setText("Updated UI"); } }); } }, 0, 1000); // Schedule task to be executed every 1 second</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!