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!