Coroutines IO Scope работает с основным потоком, а не с фоновым потоком? - PullRequest
0 голосов
/ 26 сентября 2019

Я использую Kotlin Coroutines в моем приложении для Android

Ниже приведен мой код

convertCertificateToBase64 вызывается на onActivityResult методе Android

fun convertCertificateToBase64(uri: Uri?, position: Int?) {
        CoroutineScope(IO).launch {
            performIOOperations(uri,position)
        }
    }



private suspend fun performIOOperations(uri: Uri?, position: Int?){
    val file = File(uri?.path)
    val buf = BufferedInputStream(FileInputStream(file))
    buf.read(bytes, 0, bytes.size)
    buf.close()
    val base64String = Base64.encodeToString(bytes, Base64.NO_WRAP)

    withContext(Dispatchers.Main){
               // change my ui
            }
}

Пока изображение не преобразовано в base64, я показываю progress bar, и пользовательский интерфейс зависает, когда происходит операция base64

1 Ответ

0 голосов
/ 26 сентября 2019

вы можете использовать lifecycleScope.launch(IO) в своей деятельности

lifecycleScope.launch(IO) { 
         // do heavy operation here   
}

или вы можете пометить свой func suspend и позвонить withContext(IO) напрямую

private suspend fun convertCertificateToBase64() = withContext(IO) {
   // do heavy operation here
}
...