22

Android アプリに TextView のさまざまな色を点滅させるアニメーションがあります。これを実装するために、TimerTask、Timer、および Runnable メソッドを使用しました。私がする必要があるのは、onPause() でこのアニメーション中にユーザーがアプリを離れたときにスレッドを停止し、onResume() でユーザーがアプリに戻ったときにスレッドを再開することです。以下は私が実装したコードですが、動作していません (onPause() と onResume() の部分)。その理由がわかりません。同様の問題に関する他のいくつかの投稿を読みましたが、私の状況で何をすべきかを理解するのに役立ちませんでした. TimerTasks は時代遅れであると読みましたが、おそらく ExecutorService メソッドを使用する必要があります。この機能を実装する方法は私には不明です。

   ...timerStep5 = new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                  @Override
                  public void run() {
                if (b5) {
                    cashButton2SignalText.setBackgroundColor(Color.RED);
                    cashButton2SignalText.setTextColor(Color.WHITE);
                    b5=false;
                } else {
                    cashButton2SignalText.setBackgroundColor(Color.WHITE);
                    cashButton2SignalText.setTextColor(Color.RED);
                    b5=true;
                }
                }
            });
        }
};

timer5.schedule(timerStep5,250,250);

}

public void onPause(){

    super.onPause();

    timerStep5.cancel();

}

public void onResume(){

    super.onResume();

    timerStep5.run();

}
4

4 に答える 4

14

がキャンセルされるTimerTaskと、再度実行することはできません。新しいインスタンスを作成する必要があります。

ここで詳細を読む:

https://stackoverflow.com/a/2098678/727768

ScheduledThreadPoolExecutor新しいコードには推奨されており、例外やスケジュールされた間隔よりも長い時間がかかるタスクなどのケースを処理します。

しかし、あなたの仕事にTimerTaskは十分なはずです。

于 2013-03-15T23:05:15.100 に答える
1

Kotlin ユーザーの方は、こちらをご覧ください

使い方:

// Init timer
lateinit var timerExt: CountDownTimerExt

timerExt = object : CountDownTimerExt(TIMER_DURATION, TIMER_INTERVAL) {
    override fun onTimerTick(millisUntilFinished: Long) {
        Log.d("MainActivity", "onTimerTick $millisUntilFinished")
    }

    override fun onTimerFinish() {
        Log.d("MainActivity", "onTimerFinish")
    }

}

// Start/Resume timer
timerExt.start()

// Pause timer
timerExt.pause()

// Restart timer
timerExt.restart()
于 2020-11-02T07:23:23.347 に答える