Maison > Java > javaDidacticiel > le corps du texte

Comment implémenter un compte à rebours dans Android sans fil de discussion ?

Linda Hamilton
Libérer: 2024-11-06 04:28:02
original
938 Les gens l'ont consulté

How to Implement a Timer Countdown in Android Without a Thread?

Thème Android pour un minuteur : conseils et solutions

Pour créer un compte à rebours dans Android, utiliser un fil de discussion est une approche. Cependant, le code fourni rencontre des problèmes lors de la mise à jour de l'interface utilisateur à partir d'un thread non-UI. Voici quelques solutions alternatives :

1. CountDownTimer :

Cette classe fournit un moyen simple d'implémenter des comptes à rebours. Il s'exécute sur un thread séparé et met à jour l'interface utilisateur sur le thread principal.

Exemple :

<code class="java">public class MainActivity extends Activity {

    private CountDownTimer timer;
    private TextView timerText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        timerText = (TextView) findViewById(R.id.timerText);

        startTimer(5 * 60 * 1000); // Set initial countdown time in milliseconds
    }

    private void startTimer(long timeInMilliseconds) {
        timer = new CountDownTimer(timeInMilliseconds, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                timerText.setText(String.format("%d:%02d", millisUntilFinished / 60000, (millisUntilFinished % 60000) / 1000));
            }

            @Override
            public void onFinish() {
                timerText.setText("0:00");
            }
        }.start();
    }
}</code>
Copier après la connexion

2. Gestionnaire :

Les gestionnaires vous permettent de planifier des tâches à exécuter sur le thread principal. Cette approche vous donne plus de contrôle sur le timing et le comportement du minuteur.

Exemple :

<code class="java">public class MainActivity extends Activity {

    private Handler handler;
    private Runnable timerTask;
    private TextView timerText;
    private int timeLeft = 300; // Initial time in seconds

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        timerText = (TextView) findViewById(R.id.timerText);

        handler = new Handler();
        timerTask = new Runnable() {
            @Override
            public void run() {
                if (timeLeft > 0) {
                    timeLeft--;
                    timerText.setText(String.format("%d", timeLeft));
                    handler.postDelayed(timerTask, 1000); // Recursively schedule the task
                } else {
                    timerText.setText("0");
                }
            }
        };
        handler.post(timerTask); // Start the timer
    }
}</code>
Copier après la connexion

3. Timer :

La classe Timer peut également être utilisée pour planifier des tâches. Il s'exécute sur un thread séparé et vous permet de mettre à jour l'interface utilisateur à l'aide de la méthode runOnUiThread().

Exemple :

<code class="java">public class MainActivity extends Activity {

    private Timer timer;
    private TimerTask timerTask;
    private TextView timerText;
    private int timeLeft = 300; // Initial time in seconds

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        timerText = (TextView) findViewById(R.id.timerText);

        timer = new Timer();
        timerTask = new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if (timeLeft > 0) {
                            timeLeft--;
                            timerText.setText(String.format("%d", timeLeft));
                        } else {
                            timer.cancel(); // Stop the timer
                            timerTask.cancel();
                            timerText.setText("0");
                        }
                    }
                });
            }
        };
        timer.scheduleAtFixedRate(timerTask, 1000, 1000); // Schedule the task at a fixed rate
    }
}</code>
Copier après la connexion

Ces alternatives offrent des fonctionnalités plus fiables et plus efficaces. façons de mettre en œuvre un compte à rebours dans Android. Choisissez l'approche qui correspond le mieux à vos besoins et aux exigences spécifiques de votre application.

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!

source:php.cn
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