Android协程GlobalScope、lifecycleScope、CoroutineScope的launch,Kotlin
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launchclass MainActivity : AppCompatActivity() {companion object {const val TAG = "fly"}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)Log.d(TAG, "onCreate")val delayTime = 8 * 1000LGlobalScope.launch(Dispatchers.IO) {delay(delayTime)Log.d(TAG, "GlobalScope")}lifecycleScope.launch(Dispatchers.IO) {delay(delayTime)Log.d(TAG, "lifecycleScope")}CoroutineScope(Dispatchers.IO).launch {delay(delayTime)Log.d(TAG, "CoroutineScope")}}override fun onResume() {super.onResume()Log.d(TAG, "onResume")}override fun onDestroy() {super.onDestroy()Log.d(TAG, "onDestroy")}
}
1、正常情况下,启动上面示例代码后,界面停留在手机屏幕,约8秒左右,控制台正常输出:
D onCreate
D onResume
D GlobalScope
D lifecycleScope
D CoroutineScope
2、如果启动activity后,不到8秒就按手机导航栏返回键,即把activity走入onDestroy生命周期,那么日志是:
D onCreate
D onResume
D onDestroy
D GlobalScope
D CoroutineScope
没有了 lifecycleScope的输出,因为 lifecycleScope与activity生命周期绑定,当activity销毁后, 与其绑定的lifecycleScope也随之“销毁”。
Android CoroutineScope Dispatchers.Main主线程delay,kotlin_coroutinescope(dispatchers.main)-CSDN博客文章浏览阅读449次。coroutineScope 创建独立协程作用域,直到所有启动的协程都完成后才结束自己。runBlocking 和 coroutineScope 很像,它们都需要等待内部所有相同作用域的协程结束后才会结束自己。两者主要区别是: runBlocking 阻塞当前线程,而 coroutineScope不会,coroutineScope会挂起并释放底层线程供其它协程使用。kotlin协程coroutineScope。kotlin协程coroutineScope_zhangphil的博客-CSDN博客。_coroutinescope(dispatchers.main)https://blog.csdn.net/zhangphil/article/details/131295343
kotlin协程GlobalScope.launch启动-CSDN博客文章浏览阅读552次。则控制台没有任何输出,kotlin协程在launch时候启动一个协程,不阻塞线程,main主函数迅速运行完成,并退出,但此时在for循环启动的线程还没有运行输出就因为main主线程的退出而不可见(系统销毁)。总结起来,GlobalScope 启动的协程相当于守护线程,不会阻止 JVM 结束运行退出程序。GlobalScope.launch 创建一个顶级协程,它很轻,但运行时还是会消耗内存资源,且可以一直运行直到整个应用程序停止退出,这很可能导致内存泄露,谨慎使用 GlobalScope。https://blog.csdn.net/zhangphil/article/details/129250518kotlin协程coroutineScope-CSDN博客文章浏览阅读331次。coroutineScope 创建独立协程作用域,直到所有启动的协程都完成后才结束自己。runBlocking 和 coroutineScope 很像,它们都需要等待内部所有相同作用域的协程结束后才会结束自己。两者主要区别是: runBlocking 阻塞当前线程,而 coroutineScope不会,coroutineScope会挂起并释放底层线程供其它协程使用。kotlin协程coroutineScope。https://blog.csdn.net/zhangphil/article/details/129265638