Rumah > Java > javaTutorial > Bagaimana untuk Melaksanakan Undur Pemasa dalam Android Tanpa Benang?

Bagaimana untuk Melaksanakan Undur Pemasa dalam Android Tanpa Benang?

Linda Hamilton
Lepaskan: 2024-11-06 04:28:02
asal
982 orang telah melayarinya

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

Benang Android untuk Pemasa: Petua dan Penyelesaian

Untuk membuat kira detik pemasa dalam Android, menggunakan benang ialah satu pendekatan. Walau bagaimanapun, kod yang disediakan menghadapi masalah semasa mengemas kini UI daripada urutan bukan UI. Berikut ialah beberapa penyelesaian alternatif:

1. CountDownTimer:

Kelas ini menyediakan cara mudah untuk melaksanakan kira detik. Ia dijalankan pada urutan berasingan dan mengemas kini UI pada urutan utama.

Contoh:

<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>
Salin selepas log masuk

2. Pengendali:

Pengendali membenarkan anda menjadualkan tugasan untuk dilaksanakan pada utas utama. Pendekatan ini memberi anda lebih kawalan ke atas masa dan kelakuan pemasa.

Contoh:

<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>
Salin selepas log masuk

3. Pemasa:

Kelas Pemasa juga boleh digunakan untuk menjadualkan tugas. Ia dijalankan pada urutan yang berasingan dan membolehkan anda mengemas kini UI menggunakan kaedah runOnUiThread().

Contoh:

<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>
Salin selepas log masuk

Alternatif ini menyediakan lebih dipercayai dan cekap cara untuk melaksanakan kira detik pemasa dalam Android. Pilih pendekatan yang paling sesuai dengan keperluan anda dan keperluan khusus aplikasi anda.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Undur Pemasa dalam Android Tanpa Benang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan