Benang Pemasa dalam Android: Panduan Komprehensif
Masalah:
Blok kod Java untuk mencipta benang pemasa undur dalam Android tidak berfungsi. Matlamatnya ialah untuk mencipta pemasa yang mengira detik dari 5 minit hingga 0:00, mengemas kini paparan masa pada TextView.
Penyelesaian:
1 . Sekatan Kemas Kini Thread UI:
Thread selain dari thread UI tidak boleh mengemas kini antara muka pengguna secara langsung. Dalam kes ini, utas sedang cuba mengubah suai TextView daripada utas latar belakang, yang tidak dibenarkan.
2. Pendekatan Disyorkan:
3. Contoh Pelaksanaan Alternatif:
a. CountDownTimer
<code class="java">public class MainActivity extends Activity { Button b; TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.textView1); b = (Button) findViewById(R.id.button1); b.setOnClickListener(v -> startTimer(120000)); // start countdown for 2 minutes } private void startTimer(long time) { CountDownTimer counter = new CountDownTimer(time, 1000){ public void onTick(long millisUntilDone) { tv.setText("You have " + millisUntilDone + "ms"); } public void onFinish() { tv.setText("DONE!"); } }.start(); } }</code>
b. Pengendali
<code class="java">Handler m_handler; Runnable m_handlerTask; int timeLeft = 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); m_handler = new Handler(); m_handlerTask = () -> { if (timeLeft >= 0) { Log.i("timeleft", "" + timeLeft); timeLeft--; } else { m_handler.removeCallbacks(m_handlerTask); // cancel run } m_handler.postDelayed(m_handlerTask, 1000); }; m_handlerTask.run(); }</code>
c. Pemasa
<code class="java">int timeLeft = 100; Timer _t = new Timer(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); _t.scheduleAtFixedRate(new TimerTask() { @Override public void run() { runOnUiThread(() -> { Log.i("timeleft", "" + timeLeft); // update UI elements here }); if (timeLeft > 0) { timeLeft--; } else { _t.cancel(); } } }, 1000, 1000); }</code>
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pemasa Undur dalam Android Menggunakan Thread?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!