Android 如何立即开始执行Kotlin协程

Android 如何立即开始执行Kotlin协程,android,kotlin,kotlinx.coroutines,Android,Kotlin,Kotlinx.coroutines,我想马上开始合作。我有一段代码: class SampleActivity : AppCompatActivity(), CoroutineScope { private var job: Job = Job() override val coroutineContext: CoroutineContext get() = Dispatchers.Main + job override fun onCreate(savedInstanceState:

我想马上开始合作。我有一段代码:

class SampleActivity : AppCompatActivity(), CoroutineScope {

    private var job: Job = Job()
    override val coroutineContext: CoroutineContext
        get() = Dispatchers.Main + job

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        Log.d("SampleActivity", "Before launch")

        launch {
            Log.d("SampleActivity", "Inside coroutine")
        }

        Log.d("SampleActivity", "After launch")
    }
}
输出为:

Before launch
After launch
Inside coroutine
是否可以按以下顺序实现输出

Before launch
Inside coroutine
After launch
尝试通过以下方式启动它:

launch(Dispatchers.Main.immediate)


更多信息,请参阅文章。

为什么要立即启动协同程序?启动{}会立即启动并忘记返回作业,并且协同程序可以根据需要自由完成。如果要在某些工作完成时挂起当前线程,然后继续,那么您必须已经在一个协程中。这将允许您在等待结果时挂起执行。@Choim当用户在加载数据库中的数据时打开“我的应用”时,“我的应用”中的屏幕将闪烁。我想立即启动一个协同程序将解决这个问题。你能告诉我你为什么要立即启动它吗?有任何用例吗@Sergey@Sergey屏幕闪烁不得由未立即执行的协同程序引起。我觉得你做错事了。谢谢你
Dispatchers.Main.immediate
是一个实验性功能,将来可能会更改,我想知道是否有一个生产就绪的功能。还有一个
launch(start=UNDISPATCHED)
,您不必重新声明正在使用的调度器。这是“老办法”,也被标记为实验性的。此功能还没有最终形式。但是,考虑到您在问题下的评论中的输入,这将无助于解决您的问题,因为时间差可以忽略不计。这种变化的唯一相关影响是在第一个暂停点之前的动作的保证排序(即,初始延续的执行顺序)。谢谢@ MarkoTopolnik,我会尝试一下,如果它不工作,我会考虑其他一些方法来处理我的情况。