Maison  >  Article  >  Java  >  Comment créer une minuterie sous Android sans enfreindre les règles du fil de discussion de l'interface utilisateur ?

Comment créer une minuterie sous Android sans enfreindre les règles du fil de discussion de l'interface utilisateur ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-06 12:17:02698parcourir

How to create a timer in Android without violating the UI thread rules?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn