У меня есть сценарии, в которых мне нужно сохранить некоторые объекты на диск. До сих пор я делал это с помощью ExecutorService Java. Но сейчас я делаю рефакторинг частей своего кода в Kotlin, и мне было интересно, обрабатываю ли я это право.
Так что в Java у меня есть код, который идет к моим функциям Kotlin:
// Java code calls this function in KotlinUtils.kt:
fun saveFileInBackground(saveObj: Any, fileName: String) {
GlobalScope.launch {
saveFile(...)
}
}
private suspend fun saveFile(data: ByteArray, ...) {
withContext(Dispatchers.IO) {
var file = File(....)
if (!file.exists()) file.mkdirs()
file.writeBytes(data)
}
}
Теперь я прочитал этот пост: https://medium.com/@elizarov/the-reason-to-avoid-globalscope-835337445abc
И я до сих пор не вижу причины избегать GlobalScope в данном конкретном случае. Эти записи в файлы - это то, что мне нужно на уровне моего приложения, и они не могут быть отменены в любое время после отправки этих вызовов.
Другой вариант, который я имел в виду, - это чтобы класс KotlinUtils реализовывал CoroutineScope, а затем просто вызывал launch вместо GlobalScope.launch . С другой стороны, это немного проблематично, потому что кажется, что KotlinUtil должен быть абстрактным, чего не может быть (это класс @Singleton, использующий dagger2)
Однако я довольно новичок в Kotlin иСопрограммы, так что, возможно, я что-то не так понял. Любой совет будет высоко ценится.