定時器的 Android 執行緒
此程式碼片段示範如何在 Java 中為定時器建立執行緒。但是,該程式碼無法按預期運行。讓我們分析一下問題並提供解決方案。
程式碼旨在建立一個從 5 分鐘倒數到 0:00 的計時器。出現此問題的原因是 UI 是從 UI 執行緒以外的執行緒更新的,這在 Android 中是不允許的。
解決方案1:CountDownTimer
解決此問題對於這個問題,您可以使用CountDownTimer,它允許您以特定的時間間隔執行程式碼,同時確保UI 執行緒上的UI 更新。以下是一個範例:
<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>
解決方案2:Handler
另一個選項是使用Handler,它允許您安排要在UI 執行緒上執行的任務。以下是一個範例:
<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>
解決方案3:帶有runOnUiThread 的計時器
如果您喜歡使用計時器,請記住使用runOnUiThread 更新UI 以確保其執行在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>
以上是如何在Android中建立計時器而不違反UI線程規則?的詳細內容。更多資訊請關注PHP中文網其他相關文章!