Maison  >  Article  >  Java  >  Comment mettre à jour en toute sécurité les éléments de l'interface utilisateur à partir d'un fil de discussion sous Android ?

Comment mettre à jour en toute sécurité les éléments de l'interface utilisateur à partir d'un fil de discussion sous Android ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-07 07:04:02824parcourir

How to Safely Update UI Elements from a Thread in Android?

Threading pour Timer dans Android

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!

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