Maison >Java >javaDidacticiel >Comment implémenter un compte à rebours dans Android sans fil de discussion ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-11-06 04:28:02950parcourir

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>

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>

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>

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!

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