コトリンからタイマーへの任意の関数やタスクを定期的に実行する方法を紹介します。 Timerを使用すると、初期遅延後に関数を実行したり、一定の時間間隔で同じ操作を繰り返すことができます。
1. 初期遅延後、関数1回実行
Timer().schedule(milliseconds) { }
は、引数として渡された milliseconds の後に { }
内のコードを実行します。
ワンタイムで一度だけ行い、定期的には行いません。
以下の例は、2秒後に特定の動作を実行する例です。ログに時間も一緒に出力して、いつコードが実行されたかを確認できます。
import java.time.LocalDateTime
import java.util.*
import kotlin.concurrent.schedule
fun main() {
println("schedule a job: " + LocalDateTime.now())
Timer().schedule(2000) {
println("running a job: " + LocalDateTime.now())
}
println("done: " + LocalDateTime.now())
}
Output:
schedule a job: 2022-09-15T21:42:13.033
done: 2022-09-15T21:42:13.034
running a job: 2022-09-15T21:42:15.034
上記のコードは以下のように実装することもできます。
import java.time.LocalDateTime
import java.util.*
fun main() {
println("schedule a job: " + LocalDateTime.now())
Timer().schedule(object : TimerTask() {
override fun run() {
println("running a job: " + LocalDateTime.now())
}
}, 1000)
println("done: " + LocalDateTime.now())
}
2. 初期遅延後、定期的に関数実行
Timer().scheduleAtFixedRate(initialDelay, intervalDelay) { }
は、initialDelay の間遅延後、 intervalDelay 間隔ごとに定期的に { }
のコードを実行します。
以下の例は、1秒後に特定のタスクを実行し、3秒間隔で同じタスクを繰り返す例です。
import java.time.LocalDateTime
import java.util.*
import kotlin.concurrent.scheduleAtFixedRate
fun main() {
println("schedule a job: " + LocalDateTime.now())
Timer().scheduleAtFixedRate(1000, 3000) {
println("running a job: " + LocalDateTime.now())
}
println("done: " + LocalDateTime.now())
}
Output:
schedule a job: 2022-09-15T21:46:23.432
done: 2022-09-15T21:46:23.433
running a job: 2022-09-15T21:46:24.433
running a job: 2022-09-15T21:46:27.434
running a job: 2022-09-15T21:46:30.433
running a job: 2022-09-15T21:46:33.433
....
上記のコードは以下のように実装することもできます。
import java.time.LocalDateTime
import java.util.*
fun main() {
println("schedule a job: " + LocalDateTime.now())
Timer().scheduleAtFixedRate( object : TimerTask() {
override fun run() {
println("running a job: " + LocalDateTime.now())
}
}, 1000, 3000)
println("done: " + LocalDateTime.now())
}
Related Posts
- Kotlin - エルビス演算子(Elvis Operation)
- Kotlin - Timer、定期的に関数を実行する
- Kotlinで正規表現を使用する
- Kotlin - 文字列の比較方法(equals、==、compareTo)
- Kotlin - 2つのList一つの併合
- Kotlin - ディレクトリのすべてのファイルのリスト出力
- Kotlin - リストの並べ替え方法(sort、sortBy、sortWith)
- Kotlin - 乱数生成(Random、SecureRandom)
- Kotlin - StringをFloatに変換
- Kotlin - Destructuring Declaration
- Kotlin - objectとclassキーワードの違い
- Kotlin - 現在の日付と時刻を取得する方法