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再生的なものならフレームをスキップするとか工夫が必要です。