Handlerを使って 500ms間隔で 処理を実行する場合、以下のようにすると思います。ちなみにkotlinです。
val handler = Handler()
val runnable = object : Runnable {
override fun run() {
doHeavyWork() //重い処理
handler.postDelayed(this, 500)
}
}
しかし、doHeavyWork()に処理時間が多くかかるばあい、その分の時間を差し引かなくてはいけません。例えば、 doHeavyWork() に300msかかるならpostDelayed(this, 200)にします。いや、そもそも doHeavyWork() にかかる時間は機種ごとに違うし、始めからわかってる事なんてほとんどないでしょう。
そこで、以下のようにします。
val handler = Handler()
val runnable = object : Runnable {
override fun run() {
val t = SystemClock.uptimeMillis()
doHeavyWork() //重い処理
handler.postAtTime(this, t + 500)
}
}
こんな感じにすると、いい感じになります。しかし、doHeavyWork()が500ms以上かかる場合はそもそも無理。video再生的なものならフレームをスキップするとか工夫が必要です。









