我有一个视图模型。在其中,我有一个功能,可以从手机内部存储中获取一些图像。
在获取完成之前,它会在主活动中公开实时数据。如何创建协程以等待任务完成并公开实时数据。
// 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)
}
有没有其他方法可以通过任何其他方法使此代码更快?
这样做:
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
}