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

Bagaimana untuk Melaksanakan Undur Pemasa dalam Android Tanpa Benang?

Linda Hamilton
Linda Hamiltonasal
2024-11-06 04:28:02860semak imbas

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>

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>

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>

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!

Kenyataan:
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