Rumah >Java >javaTutorial >Bagaimana untuk Mengemas kini Elemen UI dengan Selamat daripada Thread dalam Android?

Bagaimana untuk Mengemas kini Elemen UI dengan Selamat daripada Thread dalam Android?

Susan Sarandon
Susan Sarandonasal
2024-11-07 07:04:02903semak imbas

How to Safely Update UI Elements from a Thread in Android?

Threading untuk Pemasa dalam Android

Kod ini cuba melaksanakan pemasa dalam Android menggunakan benang, tetapi menghadapi masalah disebabkan penyegerakan benang. Untuk menjelaskannya, kod ini mentakrifkan pemasa yang mengira detik dari 5 minit hingga 0:00.

Dalam Android, anda tidak boleh memanipulasi antara muka pengguna daripada mana-mana utas selain utas utama (utas UI). Dalam kes ini, urutan yang dibuat oleh Thread t cuba mengemas kini TextView (elemen UI) secara langsung, yang akan mengakibatkan ralat.

Untuk menangani isu ini, anda mempunyai beberapa pilihan:

1. CountDownTimer

CountDownTimer ialah kelas Android yang memudahkan pelaksanaan pemasa. Ia membolehkan anda menjadualkan kira detik dengan tempoh dan selang waktu tertentu.

Contoh:

<code class="java">new CountDownTimer(300000, 1000) {
    @Override
    public void onTick(long millisUntilFinished) {
        // Update UI on the main thread
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                tv.setText("You have " + millisUntilFinished + "ms");
            }
        });
    }

    @Override
    public void onFinish() {
        // Update UI on the main thread
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                tv.setText("DONE!");
            }
        });
    }
}.start();</code>

2. Pengendali

Pengendali ialah kelas yang membolehkan anda menyiarkan tugasan untuk dilaksanakan pada utas utama. Ini memastikan kemas kini UI sentiasa dilakukan pada urutan yang betul.

Contoh:

<code class="java">final Handler handler = new Handler();
final Runnable runnable = new Runnable() {
    @Override
    public void run() {
        // Update UI on the main thread
        tv.setText("Updated UI");
    }
};

handler.postDelayed(runnable, 1000);  // Post task to be executed in 1 second</code>

3. Pemasa

Pemasa ialah kelas yang membolehkan anda menjadualkan tugas pada urutan yang berasingan. Walau bagaimanapun, anda masih perlu mengemas kini UI pada urutan utama.

Contoh:

<code class="java">Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        // Update UI on the main thread
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                tv.setText("Updated UI");
            }
        });
    }
}, 0, 1000);  // Schedule task to be executed every 1 second</code>

Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini Elemen UI dengan Selamat daripada Thread dalam Android?. 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