在Kotlin中,所有的协程都运行在CoroutineScope中。它通过job控制coroutines的生命周期。当你取消了该scope上的job, 该scope上所有启动的coroutine都会被取消。当Activity与Fragment销毁时,你可以用一个scope取消所有运行的协程。Scopes也允许你运行在一个特定的dispatcher上。一个dispatcher控制着coroutine运行在哪个线程上。
public val Lifecycle.coroutineScope: LifecycleCoroutineScope get() { while (true) { //xxxxxxxxxx } } 举个例子: 宿主Activity A ,包含FragmentB 、 FragmentC 两个Fragment FragmentB 和 FragmentC 根据相关的逻辑 可以随时Replace切换 此时Activity A 有个定时轮询,每固定间隔通过FragmentB FragmentC 实例访...
1、同一个FragmentActivity/Fragment下,rxLifeScope与lifecycleScope不能共用;同一个ViewModel下,rxLifeScope与viewModelScope不能共用 2、配合RxHttp发请求时,每次都要开启一个协程来捕获异常,这对于再次封装的人,非常不友好; 目前RxHttp的awaitResult操作符一样可以捕获异常,所以rxLifeScope就没了用武之地,是时候退出历...
class DemoFragment : Fragment() { private val coroutineScope = CoroutineScope(Dispatchers.IO) init { printGlobalScopeWithIO() printGlobalScope() printCoroutineScope() printCoroutineScopeWithMain() printLifecycleScope() printLifecycleScopeWithIO() } override fun onPause() { super.onPause() coroutine...
在Android中, 可以把一个屏幕(Activity/Fragment)和一个CoroutineScope关联, 这样在Activity或Fragment生命周期结束的时候, 可以取消这个scope下的所有协程, 好避免协程泄漏. 利用CoroutineScope来做这件事有两种方法: 创建一个CoroutineScope对象和activity的生命周期绑定, 或者让activity实现CoroutineScope接口. ...
public fun MainScope(): CoroutineScope = ContextScope(SupervisorJob() + Dispatchers.Main) 1. 2. 该函数是一个顶层函数,用于返回一个上下文是SupervisorJob() + Dispatchers.Main的作用域,该作用域常被使用在Activity/Fragment,并且在界面销毁时要调用fun CoroutineScope.cancel(cause: CancellationException? =...
private lateinit var addressUpdateFragment: AddressUpdateFragment @@ -42,6 +40,8 @@ class BasicClientFragment : Fragment() { container: ViewGroup?, savedInstanceState: Bundle? ): View { scope = viewLifecycleOwner.lifecycleScope return inflater.inflate(R.layout.basic_client_fragment, container, ...
CoroutineScopehttps://developer.android.com/topic/libraries/architecture/coroutines MainScope 主线程的作用域,全局范围 lifecycleScope生命周期范围,用于activity等有生命周期的组件,DESTROYED结束。 classMyFragment:Fragment(){overridefunonViewCreated(view:View,savedInstanceState:Bundle?){super.onViewCreated(view,saved...
定义协程必须指定其CoroutineScope,它会跟踪所有协程,还可以取消由它启动的所有协程。常用的API有: GlobalScope,生命周期是process级别的,即使Activity/Fragment销毁,协程仍在执行。 MainScope,在Activity中使用,可以在onDestroy中取消协程。 viewModelScope,只能在ViewModel中使用,绑定ViewModel的生命周期。 lifecycleScope,只能...
liveData(viewModelScope.coroutineContext + Dispatchers.IO) { // get data from is asuspendfunction val data = aSuspedFunction emit(data) } 2. Connect Kotlin Flow (or StateFlow) to LiveData 以上是一次性的获取。但如果我们有一个流程,其中数据是连续排放的,我们可以使用: ...