首页 > 解决方案 > Kotlin Coroutines 等待作业完成

问题描述

我有一个视图模型。在其中,我有一个从手机内部存储中获取一些图像的功能。

在获取完成之前,它会在 mainactivity 中公开 livedata。如何使协程等待任务完成并公开实时数据。

 // This is my ViewModel

 private val _image = MutableLiveData<ArrayList<File>>()
 val images: LiveData<ArrayList<File>> get() = _image

fun fetchImage(){
    val file = Path.imageDirectory  //  returns a directory where images are stored
    val files = arrayListOf<File>()
    viewModelScope.launch {
        withContext(Dispatchers.IO) {
            if (file.exists()) {
                file.walk().forEach {
                    if (it.isFile && it.path.endsWith("jpeg")) {
                        files.add(it)
                    }
                }
            }

            files.sortByDescending { it.lastModified() } // sort the files to get newest 
                                                         // ones at top of the list
        }
    }

    _image.postValue(files)
}

有没有其他方法可以通过任何其他方法使这段代码更快?

标签: androidperformancekotlinmvvmkotlin-coroutines

解决方案


像这样做:

fun fetchImage() = viewModelScope.launch {
    val file = Path.imageDirectory  //  returns a directory where images are stored
    val files = arrayListOf<File>()

    withContext(Dispatchers.IO) {
        if (file.exists()) {
            file.walk().forEach {
                if (it.isFile && it.path.endsWith("jpeg")) {
                    files.add(it)
                }
            }
        }

        files.sortByDescending { it.lastModified() } // sort the files to get newest
        // ones at top of the list
    }

    _image.value = files
}

推荐阅读