【Android】SharedFlow를 사용하여 EventBus 만들기
전치
좋아요 처리, 즐겨찾기 처리 등, 화면간을 넘은 이벤트 송신을 실시하고 싶은 경우, 지금까지는 EventBus 나 otto를 사용하고 있었던 것이 많다고 생각합니다.
하지만 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를 만들 수 있기 때문에 고맙습니다
Reference
이 문제에 관하여(【Android】SharedFlow를 사용하여 EventBus 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/alpha2048/items/49fdcfa61c9ada78d517텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)