import android.arch.lifecycle.Lifecycle
import android.arch.lifecycle.LifecycleObserver
import android.arch.lifecycle.LifecycleOwner
import android.arch.lifecycle.OnLifecycleEvent
import kotlinx.coroutines.*
fun <T> LifecycleOwner.load(loadFunction: () -> T): Deferred<T> {
val deferred = GlobalScope.async(context = Dispatchers.IO, start = CoroutineStart.LAZY) { loadFunction() }
lifecycle.addObserver(CoroutineLifecycleListener(deferred))
return deferred
}
infix fun <T> Deferred<T>.then(uiFunction: (T) -> Unit) {
GlobalScope.launch(context = Dispatchers.Main) { uiFunction(this@then.await()) }
}
class CoroutineLifecycleListener(private val deferred: Deferred<*>) : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun cancelCoroutine() {
if (!deferred.isCancelled) {
deferred.cancel()
}
}
}
Kotlin Coroutines
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Kotlin Coroutines是Kotlin推出的新的异步API。并不是解决所有问题的最优方案,但是希望在许多...
- Kotlin Coroutines(协程) 完全解析系列: Kotlin Coroutines(协程) 完全解析(...
- 原文地址:https://proandroiddev.com/forget-rxjava-kotlin-corou...
- 协程虽然是微线程,但是并不会和某一个特定的线程绑定,它可以在A线程中执行,并经过某一个时刻的挂起(suspend)...
- 一. 协程 Kotlin 在1.1版本之后引入了协程的概念,目前它还是一个试验的API。 在操作系统中,我们知道进...