はじめに
Android開発で、連続操作対策方法について解説。
例えば、ボタンが連打された際、連打の回数分処理を行うのはなく、回数を絞って操作を行うようにする。
対策としては以下の2通り。
- debounce(デバウンス): 最後の呼び出しから一定時間が経過した場合に処理を実行する
- throttle(スロットル): 一定時間ごとに 最初に発生したイベントのみ処理する
デバウンス
1.フローを定義
// フロー
val flow = MutableSharedFlow<String>(extraBufferCapacity = 100)
2.初期化時、フロー処理を記述
// デバウンス処理
CoroutineScope(Dispatchers.Main).launch {
flow
.debounce(1000) // 最後の呼び出しから1000ms経過した場合に処理を実行
.collect {
// ここで処理を行う
}
}
3.イベント発生処理を記述
flow.tryEmit("test")
※スロットルを行いたい時は、2
でdebounce
→sample
に変更。