【Android】SharedFlow를 사용하여 EventBus 만들기

전치



좋아요 처리, 즐겨찾기 처리 등, 화면간을 넘은 이벤트 송신을 실시하고 싶은 경우, 지금까지는 EventBusotto를 사용하고 있었던 것이 많다고 생각합니다.

하지만 SharedFlow를 사용하면 라이브러리를 사용하지 않고도 스스로 쉽게 구현할 수 있으므로, 비망록이 테라 샘플을 써 둡니다.

실은 SharedFlow의 공식 페이지에도 샘플이 써 있습니다.
이번에는 조금만 망했을 뿐입니다

샘플



CoroutineEventStore.kt
class CoroutineEventStore {
    companion object {
        private var instance: CoroutineEventStore = CoroutineEventStore()
        fun getInstance() : CoroutineEventStore {
            return instance
        }
    }

    // Eventはこれを継承すること
    interface CoroutineEvent

    private val _events = MutableSharedFlow<CoroutineEvent>()
    val events = _events.asSharedFlow()

    suspend fun post(event: CoroutineEvent) {
        _events.emit(event)
    }
}

data class HogeEvent(val data: **): CoroutineEventStore.CoroutineEvent

사용법



전송


CoroutineEventStore.getInstance().post(hogeEvent)

수신


**Scope.launch {
  CoroutineEventStore.getInstance().events
    .mapNotNull { if (it is HogeEvent) it else null }
    .collect {
      // 受信時の処理を書く
    }
}

특히 수신 처리는 각 Event 클래스마다 UseCase 등으로 나누어 주면 사용하기 쉽다고 생각합니다.
매우 간단하게 EventBus를 만들 수 있기 때문에 고맙습니다

좋은 웹페이지 즐겨찾기