Хотя в вашем коде нет доказательств, я предполагаю, что ваш диспетчер по умолчанию, установленный в CoroutineScope
, который вы неявно используете, равен Dispatchers.Main
(поток пользовательского интерфейса). Вы продолжаете использовать один и тот же диспетчер для фоновой работы вместо Dispatchers.IO
.
Вторым моментом является то, что вы используете async-await
ни для чего, вы должны использовать withContext
вместо этого и объявить вашу функцию как suspend fun
.
Учитывая вышесказанное, ваш код должен быть
override fun onResume() {
super.onResume()
launch {
apkFiles = searchMyFiles(rootDir)
showMyFiles()
}
}
private suspend fun searchMyFiles(dir: File) : MutableList<MyFile> =
withContext(Dispatchers.IO) {
dir.walk()
.filter { !it.isDirectory }
.filter { it.extension.equals(MY_EXTENSION, true) }
.map { MyFile(it, context) }
.filter { it.valid }
.sorted()
.toMutableList()
}
}