Maison > Java > javaDidacticiel > 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
Libérer: 2024-11-07 07:04:02
original
1002 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal