为何无延迟的Coroutine会在其后代码执行完毕后才调用?
为什么无延迟的Coroutine会在下方代码执行完后才运行?
先看你给出的示例代码:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) GlobalScope.launch { println("Hello from coroutine") } println("Hello from outside") }
输出结果是:I/System.out: Hello from outsideI/System.out: Hello from coroutine
原因其实很简单:
- 调用
GlobalScope.launch时,只是把协程里的代码异步提交到了后台线程池的任务队列中,这个操作本身不会阻塞当前的主线程。 - 主线程会按顺序继续执行后续的
println("Hello from outside"),这行代码是同步执行的,会立刻输出内容。 - 之后后台线程池才会调度空闲线程去执行协程里的代码,所以协程的输出会排在后面。
哪怕协程里没有设置任何延迟,它的执行也需要等待线程池完成任务调度,而主线程的同步代码是直接在当前线程执行,自然会先跑完。
内容的提问来源于stack exchange,提问作者user19878941
相关产品推荐
相关产品推荐

