1
domosekai 2020-07-20 21:07:02 +08:00
viewscope 里调用的 suspend 函数在不在主线程执行,要看这个函数本身的实现选择了什么 context (它自己会调用 withcontext ),一般而言网络相关的 API 如果封装成了 suspend 那么就不会在主线程执行,但这个是它自己选择的 context 而不是你怎么调用它所决定的。你也完全可以写一个在主线程跑的 suspend 函数。
|
2
domosekai 2020-07-20 21:25:41 +08:00
至于你说的前一种,一般是要调用的函数不是 suspend 而是 blocking 的,那么就得由你给一个非主线程的 context,因为他自己不选择
|
3
mxalbert1996 2020-07-20 22:33:45 +08:00 via Android
withContext 是在一个 CoroutineScope 里切换 Context 用的。suspend fun 只是表示这个方法会挂起 Coroutine 所以必须在 CoroutineScope 里或者由其他 suspend fun 调用,它本身不指定 Context 。用途完全不一样。
话说这种基本的东西还是建议去看官方文档,研究一下教程里的案例就很容易理解了。 |
4
maninfog 2020-07-20 22:43:51 +08:00 via iPhone
suspend 关键字标记函数表示该函数只能在协程 scope 中或者另一个 suspend 方法中调用,一般该函数为耗时函数。
withContext 则表示将接受的代码块内的东西放到指定 Dispatcher 中调用,调用完毕后自动切回当前 scope 继续运行。 |
5
fansangg 2020-07-21 00:42:19 +08:00
withContext 切线程,suspend 标识一个协程函数
|
6
cjh1095358798 2020-07-21 11:24:35 +08:00
suspend 只是一个标记
|