컴퓨터공부/RxJava

매우 간결하고 파워풀한 RxJava 이벤트 버스(Super simple event bus with RxJava and Kotlin)

achivenKakao 2020. 10. 6. 15:25

싱글톤으로 아래를 선언하고,

main 처럼 사용하면 됩니다.

 

장점은 클래스 타입에 따라서 event가 발생하게 되므로 데이터 클래스 관련 처리를 callback처럼 사용할 수 있습니다. 

예를 들어, thread1 에서 서버나 db 데이터를 가져 오고 그것을 mainthread로 가져 오려고 할 때, 

publish()를 사용하면 adapter에 데이터를 가공 후 바로 저장할 수 있습니다.

 

특히.. 

서버나 db에서 데이터를 가져 올 때, 몇 개를 가져 오는지 알 수 없어서 항목을 하나씩 업데이트 해야 할 때 좋을 것 같습니다.

 

 

import io.reactivex.Observable
import io.reactivex.subjects.PublishSubject

// 혹은 implementation "io.reactivex.rxjava2:rxjava:2.2.19"


object RxBus {

    private val publisher = PublishSubject.create<Any>()

    fun publish(event: Any) {
        publisher.onNext(event)
    }

    fun <T> listen(eventType: Class<T>): Observable<T> = publisher.ofType(eventType)
}


fun main(args: Array<String>) {
    // Custom MessageEvent class
    data class MessageEvent(val action: Int,
                            val message: String)

// Listen for MessageEvents only
    RxBus.listen(MessageEvent::class.java).subscribe {
        println("Im a Message event ${it.action} ${it.message}")
    }

// Listen for String events only
    RxBus.listen(String::class.java).subscribe {
        println("Im a String event $it")
    }

// Listen for Int events only
    RxBus.listen(Integer::class.java).subscribe {
        println("Im an Int event $it")
    }


// Publish events
    RxBus.publish(MessageEvent(1, "Hello, World"))
    RxBus.publish("Testing")
    RxBus.publish(123)
    RxBus.publish(456)
}

 

 

 

 

출처 : android.jlelse.eu/super-simple-event-bus-with-rxjava-and-kotlin-f1f969b21003