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()
}

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()
}

Constructors

Link copied to clipboard
constructor()

Properties

Link copied to clipboard
val count: Int

The number of tracked jobs.

Link copied to clipboard

Whether the bag has any tracked jobs.

Functions

Link copied to clipboard
fun add(job: Job?)

Adds a job to the bag for management.

Link copied to clipboard
fun cancelAll()

Cancels all tracked jobs and clears the bag.