Rumah >Java >javaTutorial >Bagaimana untuk Mengemas kini Elemen UI dengan Selamat daripada Thread 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!