Rumah > Java > javaTutorial > teks badan

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

Barbara Streisand
Lepaskan: 2024-11-06 12:17:02
asal
640 orang telah melayarinya

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

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

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!