Observer Bag
class ObserverBag
A utility for managing multiple observer Jobs with unified cleanup.
ObserverBag simplifies the common pattern of tracking multiple coroutine Jobs for cleanup. Instead of declaring separate variables for each job, use a single ObserverBag.
Before:
private var recordingJob: Job? = null
private var durationJob: Job? = null
private var levelJob: Job? = null
override fun onCleared() {
recordingJob?.cancel()
durationJob?.cancel()
levelJob?.cancel()
}Content copied to clipboard
After:
private val observers = ObserverBag()
fun setupObservers() {
observers.add(scope.launch { recorder.isRecording.collect { ... } })
observers.add(scope.launch { recorder.level.collect { ... } })
}
override fun onCleared() {
observers.cancelAll()
}Content copied to clipboard