1

我正在从 android 设备中获取图像、视频和音乐文件。我想在不阻塞 UI 线程的情况下使用三个并行程序在后台运行我的代码。

suspend fun getImages() : ArrayList<VideoData> {
    
}
suspend fun getVideos() : ArrayList<ImageData> {

}
suspend fun getAudio() : ArrayList<AudioData> {

}

这三个函数必须并行执行。我不想等待所有这些都完成。当一个功能完成后,我想在主线程(即 UI 线程)上执行一些代码。

4

1 回答 1

1

使用协程是一种选择。

创建您的挂起函数:

suspend fun getImages() : ArrayList<VideoData> {

    withContext(Dispatchers.IO) {
        // Dispatchers.IO
        /* perform blocking network IO here */
    }
}
suspend fun getVideos() : ArrayList<ImageData> {...}
suspend fun getAudio()  : ArrayList<AudioData> {...}

创建工作

val coroutineJob_1 = Job()

创建范围

val coroutineScope_1 = CoroutineScope(coroutineJob + Dispatchers.Main)
       

在您的活动/片段中启动具有范围的作业...

coroutineScope_1.launch {

     // Await
     val response = getImages()

     show(response)
}

show()有你的用户界面代码。

您可以启动多个作业以并行工作...

coroutineScope_2.launch {...}
coroutineScope_3.launch {...}
于 2020-11-11T10:34:17.030 回答