Thème Android pour un minuteur
Cet extrait de code montre comment créer un fil de discussion pour un minuteur en Java. Cependant, le code ne fonctionne pas comme prévu. Analysons le problème et proposons des solutions.
Le code est destiné à créer un compte à rebours de 5 minutes à 0h00. Le problème survient car l'interface utilisateur est mise à jour à partir d'un fil autre que le fil de l'interface utilisateur, ce qui n'est pas autorisé dans Android.
Solution 1 : CountDownTimer
Pour résoudre ce problème problème, vous pouvez utiliser un CountDownTimer, qui vous permet d'exécuter du code à des intervalles spécifiques tout en garantissant que l'interface utilisateur est mise à jour sur le thread de l'interface utilisateur. Voici un exemple :
<code class="java">public class MainActivity extends Activity { TextView timer1; CountDownTimer countdownTimer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); timer1 = findViewById(R.id.timer1); countdownTimer = new CountDownTimer(300000, 1000) { @Override public void onTick(long millisUntilFinished) { // Update the timer text } @Override public void onFinish() { // Timer has finished } }; countdownTimer.start(); } }</code>
Solution 2 : Gestionnaire
Une autre option consiste à utiliser un gestionnaire, qui vous permet de planifier des tâches à exécuter sur le fil de l'interface utilisateur. . Voici un exemple :
<code class="java">public class MainActivity extends Activity { TextView timer1; Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); timer1 = findViewById(R.id.timer1); handler = new Handler(); // Schedule a task to update the timer every second handler.postDelayed(new Runnable() { @Override public void run() { // Update the timer text handler.postDelayed(this, 1000); } }, 1000); } }</code>
Solution 3 : Timer avec runOnUiThread
Si vous préférez utiliser un Timer, pensez à mettre à jour l'interface utilisateur à l'aide de runOnUiThread pour vous assurer qu'il est exécuté sur le fil de discussion de l'interface utilisateur.
<code class="java">public class MainActivity extends Activity { TextView timer1; Timer timer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); timer1 = findViewById(R.id.timer1); timer = new Timer(); // Schedule a task to update the timer every second timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { // Update the timer text } }); } }, 1000, 1000); } }</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!