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!