首頁 > Java > java教程 > 主體

如何在Android中建立計時器而不違反UI線程規則?

Barbara Streisand
發布: 2024-11-06 12:17:02
原創
639 人瀏覽過

How to create a timer in Android without violating the UI thread rules?

定時器的 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!