日々是好日~every day is a good day~

日常の中の非日常の備忘録

【Android Studio】タイマータスク

Android Studio kotlinのメソッドパーツ化
今回はタイマータスクです
前にアップしたRunnableと同様 定期的に指定の処理をするタイマーです
動きが同じならどう使い分けるのか?
ごめんなさい 不勉強でよく分かりません
何となくですが クラスの継承に関係があるのかと…
使い分けは説明できませんが 使い方を

val timer = Timer()
val handler = Handler()

timer.schedule(object : TimerTask() {
                override fun run() {
                    handler.post { 
			/*処理*/
		  }
                }
            }, 3000, 1000)   //3秒後にタイマー開始して 1秒ごとに処理をする

タイマー処理を中止するときは

timer.cancel()

使用例はRunnableと同じ仕様です(xmlファイルは省略します)

import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.widget.Button
import android.widget.TextView
import java.util.Timer
import java.util.TimerTask

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val btStart:Button = findViewById(R.id.btstart)
        val btStop:Button = findViewById(R.id.btstop)
        val tv:TextView = findViewById(R.id.tv)

        var timer = Timer()
        val handler = Handler()
        btStart.setOnClickListener {
            timer = Timer()
            timer.schedule(object : TimerTask() {
                override fun run() {
                    handler.post {
                        //タイマー処理の内容
                        tv.setBackgroundColor(Color.rgb((0..255).random(),(0..255).random(),(0..255).random()))
                    }
                }
            }, 0, 2000)   //タイマー開始までの時間0ミリ秒,2000ミリ秒ごとに繰り返し
        }
        btStop.setOnClickListener {
            timer.cancel()
        }
    }
}

実行結果はRunnableの時と同じです
everydayisagoodday.hatenadiary.com
ただTimerは1度キャンセルしてしまうと再利用できません
なのでスタートボタンを押すたびにtimerを設定しています
私が作る簡単なプログラムにはRunnableで十分な気がします