AI в реальной разработке. (ex. Android dev)
Агенты, тулзы, бенчмарки, архитектура, процессы и личные заметки из продакшена
3–5 постов в неделю от @Lamprof
Post #28
275
Разбираем использование runBlocking в Android:
👉 Что такое runBlocking?
Функция, которая запускает новую корутину и блокирует текущий поток до её завершения.
Часто используется в примерах для демонстрации корутин в main() функции.
👉 Почему стоит быть осторожным с runBlocking в Android?
Блокирует текущий поток, что на Android может привести к замораживанию UI и возникновению ANR (Application Not Responding).
Особенно критично при выполнении операций ввода-вывода в главном потоке.
👉 Пример неправильного использования:
´´´
class MainViewModel(private val mainRepository: MainRepository) : ViewModel() {
// Не рекомендуется
private fun fetchPosters() = runBlocking {
mainRepository.fetchPosters()
}
}
´´
В этом примере runBlocking блокирует главный поток, что может привести к проблемам с отзывчивостью приложения.
👉 Рекомендуемые альтернативы:
Используйте viewModelScope для запуска корутин, что обеспечивает автоматическую отмену задач при уничтожении ViewModel.
Применяйте launch или async для асинхронных операций без блокировки главного потока.
(c) Черновик канала @droidgr
getstream.io Exercise Caution When Using runBlocking on Android Explore the internal mechanism of runBlocking and the reasons why you exercise caution when using runBlocking. 👉 Что такое runBlocking?
Функция, которая запускает новую корутину и блокирует текущий поток до её завершения.
Часто используется в примерах для демонстрации корутин в main() функции.
👉 Почему стоит быть осторожным с runBlocking в Android?
Блокирует текущий поток, что на Android может привести к замораживанию UI и возникновению ANR (Application Not Responding).
Особенно критично при выполнении операций ввода-вывода в главном потоке.
👉 Пример неправильного использования:
´´´
class MainViewModel(private val mainRepository: MainRepository) : ViewModel() {
// Не рекомендуется
private fun fetchPosters() = runBlocking {
mainRepository.fetchPosters()
}
}
´´
В этом примере runBlocking блокирует главный поток, что может привести к проблемам с отзывчивостью приложения.
👉 Рекомендуемые альтернативы:
Используйте viewModelScope для запуска корутин, что обеспечивает автоматическую отмену задач при уничтожении ViewModel.
Применяйте launch или async для асинхронных операций без блокировки главного потока.
(c) Черновик канала @droidgr



