Rumah  >  Artikel  >  Java  >  Bagaimana untuk membuat pemasa dalam Android tanpa melanggar peraturan benang UI?

Bagaimana untuk membuat pemasa dalam Android tanpa melanggar peraturan benang UI?

Barbara Streisand
Barbara Streisandasal
2024-11-06 12:17:02625semak imbas

How to create a timer in Android without violating the UI thread rules?

Benang Android untuk Pemasa

Coretan kod ini menunjukkan cara membuat utas untuk pemasa dalam Java. Walau bagaimanapun, kod itu tidak berfungsi seperti yang dimaksudkan. Mari kita analisa isu dan berikan penyelesaian.

Kod ini bertujuan untuk mencipta pemasa yang mengira detik dari 5 minit hingga 0:00. Masalah timbul kerana UI sedang dikemas kini daripada urutan selain daripada utas UI, yang tidak dibenarkan dalam Android.

Penyelesaian 1: CountDownTimer

Untuk menyelesaikan masalah ini isu, anda boleh menggunakan CountDownTimer, yang membolehkan anda melaksanakan kod pada selang waktu tertentu sambil memastikan UI dikemas kini pada utas UI. Berikut ialah contoh:

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

    TextView timer1;
    CountDownTimer countdownTimer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        timer1 = findViewById(R.id.timer1);
        countdownTimer = new CountDownTimer(300000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                // Update the timer text
            }

            @Override
            public void onFinish() {
                // Timer has finished
            }
        };
        countdownTimer.start();
    }
}</code>

Penyelesaian 2: Pengendali

Pilihan lain ialah menggunakan Pengendali, yang membolehkan anda menjadualkan tugas untuk dijalankan pada urutan UI . Berikut ialah contoh:

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

    TextView timer1;
    Handler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        timer1 = findViewById(R.id.timer1);
        handler = new Handler();

        // Schedule a task to update the timer every second
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                // Update the timer text
                handler.postDelayed(this, 1000);
            }
        }, 1000);
    }
}</code>

Penyelesaian 3: Pemasa dengan runOnUiThread

Jika anda lebih suka menggunakan Pemasa, ingat untuk mengemas kini UI menggunakan runOnUiThread untuk memastikan ia dilaksanakan pada urutan UI.

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

    TextView timer1;
    Timer timer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        timer1 = findViewById(R.id.timer1);
        timer = new Timer();

        // Schedule a task to update the timer every second
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        // Update the timer text
                    }
                });
            }
        }, 1000, 1000);
    }
}</code>

Atas ialah kandungan terperinci Bagaimana untuk membuat pemasa dalam Android tanpa melanggar peraturan benang UI?. 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