Benang Android untuk Pemasa: Petua dan Penyelesaian
Untuk membuat kira detik pemasa dalam Android, menggunakan benang ialah satu pendekatan. Walau bagaimanapun, kod yang disediakan menghadapi masalah semasa mengemas kini UI daripada urutan bukan UI. Berikut ialah beberapa penyelesaian alternatif:
1. CountDownTimer:
Kelas ini menyediakan cara mudah untuk melaksanakan kira detik. Ia dijalankan pada urutan berasingan dan mengemas kini UI pada urutan utama.
Contoh:
<code class="java">public class MainActivity extends Activity { private CountDownTimer timer; private TextView timerText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); timerText = (TextView) findViewById(R.id.timerText); startTimer(5 * 60 * 1000); // Set initial countdown time in milliseconds } private void startTimer(long timeInMilliseconds) { timer = new CountDownTimer(timeInMilliseconds, 1000) { @Override public void onTick(long millisUntilFinished) { timerText.setText(String.format("%d:%02d", millisUntilFinished / 60000, (millisUntilFinished % 60000) / 1000)); } @Override public void onFinish() { timerText.setText("0:00"); } }.start(); } }</code>
2. Pengendali:
Pengendali membenarkan anda menjadualkan tugasan untuk dilaksanakan pada utas utama. Pendekatan ini memberi anda lebih kawalan ke atas masa dan kelakuan pemasa.
Contoh:
<code class="java">public class MainActivity extends Activity { private Handler handler; private Runnable timerTask; private TextView timerText; private int timeLeft = 300; // Initial time in seconds @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); timerText = (TextView) findViewById(R.id.timerText); handler = new Handler(); timerTask = new Runnable() { @Override public void run() { if (timeLeft > 0) { timeLeft--; timerText.setText(String.format("%d", timeLeft)); handler.postDelayed(timerTask, 1000); // Recursively schedule the task } else { timerText.setText("0"); } } }; handler.post(timerTask); // Start the timer } }</code>
3. Pemasa:
Kelas Pemasa juga boleh digunakan untuk menjadualkan tugas. Ia dijalankan pada urutan yang berasingan dan membolehkan anda mengemas kini UI menggunakan kaedah runOnUiThread().
Contoh:
<code class="java">public class MainActivity extends Activity { private Timer timer; private TimerTask timerTask; private TextView timerText; private int timeLeft = 300; // Initial time in seconds @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); timerText = (TextView) findViewById(R.id.timerText); timer = new Timer(); timerTask = new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { if (timeLeft > 0) { timeLeft--; timerText.setText(String.format("%d", timeLeft)); } else { timer.cancel(); // Stop the timer timerTask.cancel(); timerText.setText("0"); } } }); } }; timer.scheduleAtFixedRate(timerTask, 1000, 1000); // Schedule the task at a fixed rate } }</code>
Alternatif ini menyediakan lebih dipercayai dan cekap cara untuk melaksanakan kira detik pemasa dalam Android. Pilih pendekatan yang paling sesuai dengan keperluan anda dan keperluan khusus aplikasi anda.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Undur Pemasa dalam Android Tanpa Benang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!