Как насчет этого?:
Создать интерфейс для уведомления о каждом обратном вызове, переопределенном методе и т. Д. c. вам нужно:
interface Notifier<T> {
fun notify(t: T)
}
Внутри вашего класса объявите объект для реализации этого интерфейса:
private var notifier: Notifier<Int>? = null
Также объявите поток с компоновщиком callbackFlow
, где вы инициализируете объект уведомителя:
val myFlow = callbackFlow<Int> {
notifier = object: Notifier<Int> {
override fun notify(t: Int) {
launch {
channel.send(t)
}
}
}
awaitClose()
}
Внутри ваших методов уведомите ваши данные:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
notifier?.notify(1)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
notifier?.notify(2)
}
И, наконец, используйте Поток следующим образом:
val job = launch(Dispatchers.Default) {
myClassReference.myFlow
.collect {
when(it) {
1 -> { println("It's one") }
2 -> { println("It's two") }
}
}
}
И обязательно отмените job
должным образом.