ホームページ > Java > &#&チュートリアル > UI スレッドのルールに違反せずに Android でタイマーを作成するにはどうすればよいですか?

UI スレッドのルールに違反せずに Android でタイマーを作成するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-06 12:17:02
オリジナル
706 人が閲覧しました

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: ハンドラー

別のオプションは、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>
ログイン後にコピー

以上がUI スレッドのルールに違反せずに Android でタイマーを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート