Android 通过Kotlin协同程序在后台保存文件
在我的android应用程序的ViewModel中Android 通过Kotlin协同程序在后台保存文件,android,kotlin-coroutines,Android,Kotlin Coroutines,在我的android应用程序的ViewModel中 private fun finishProcessRecognizedCheck( firebaseVisionImage: FirebaseVisionImage, firebaseVisionText: FirebaseVisionText, recognizedCheck: Check ) { val file_prefix = resultRecognizedCheckList.
private fun finishProcessRecognizedCheck(
firebaseVisionImage: FirebaseVisionImage,
firebaseVisionText: FirebaseVisionText, recognizedCheck: Check
) {
val file_prefix = resultRecognizedCheckList.size.toString()
RecognizedCheckDataService.saveRecognizedImage(firebaseVisionImage, file_prefix)
RecognizedCheckDataService.saveRecognizedText(firebaseVisionText, file_prefix)
}
如您所见,我将图像文件保存到UI线程中的内部文件夹中。
因此,应用程序被冻结。
是否可以通过Kotlin的协同程序在背景上保存图像?
AA协同程序需要一个作用域来运行。因此,我们使用调度器和作业创建一个作用域
//Initialization of job
private var job = Job()
// Initialization of scope for the coroutine to run in
private var scopeForSaving = CoroutineScope(job + Dispatchers.Main)
private fun saveButtonClick() {
scopeForSaving.launch { saveToStorage() }
}
private suspend fun saveToStorage(){
withContext(Dispatchers.IO){
//Logic for saving the image goes here
}
}
//Initialization of job
private var job = Job()
// Initialization of scope for the coroutine to run in
private var scopeForSaving = CoroutineScope(job + Dispatchers.Main)
private fun saveButtonClick() {
scopeForSaving.launch { saveToStorage() }
}
private suspend fun saveToStorage(){
withContext(Dispatchers.IO){
//Logic for saving the image goes here
}
}
onDestroy()
中取消作业,这样当活动被销毁时,我们就可以确保所有协同路由都被终止
override fun onDestroy() {
super.onDestroy()
scopeForSaving.cancel()
}