GlobalScope.launch(Dispatchers.IO) {}
GlobalScope.launch{}
CoroutineScope(Dispatchers.IO).launch{}
lifecycleScope.launch(Dispatchers.IO){}
lifecycleScope.launch{}
首先了解一下Dispatchers各种区别:
-
Dispatchers.Default:CPU 密集型工作,例如对大型列表进行排序、进行复杂计算等。JVM 上的共享线程池支持它。
-
Dispatchers.IO:网络或文件读写。简而言之——顾名思义,任何输入和输出
-
Dispatchers.Main:在 Android 的主线程或 UI 线程中执行 UI 相关事件的强制调度程序。
1-GlobalScope.launch(Dispatchers.IO) {}
只要您的应用程序还活着,GlobalScope 就一直存在,通常不鼓励这样子使用,因为必须手动维护join()或者
cancel()
。
2-GlobalScope.launch{}
它与第一个相同,但默认情况下,如果您没有任何上下文,则启动使用 Dispatchers.Default 的 EmptyCoroutineContext。
3-CoroutineScope(Dispatchers.IO).launch{}
这个和第一个一样,只是语法不同。
4-lifecycleScope.launch(Dispatchers.IO){}
lifecycleScope
是LifeCycleOwner
对 Activity 或 Fragment 的生命周期的扩展和绑定,其中当该 Activity 或 Fragment 被销毁时范围被取消。
/**
* [CoroutineScope] tied to this [LifecycleOwner]'s [Lifecycle].
*
* This scope will be cancelled when the [Lifecycle] is destroyed.
*
* This scope is bound to
* [Dispatchers.Main.immediate][kotlinx.coroutines.MainCoroutineDispatcher.immediate].
*/
val LifecycleOwner.lifecycleScope: LifecycleCoroutineScope
get() = lifecycle.coroutineScope
5-lifecycleScope.launch(){}同上