Что будет при добавлении элементов в базу данных в Room если подписаться на получение элементов через Flow

«Что будет при добавлении элементов в базу данных в Room если подписаться на получение элементов через Flow» — вопрос из категории Базы данных, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При добавлении элементов в базу Room с подпиской через Flow, Flow автоматически эмитит новые данные при каждом изменении таблицы. Room интегрирован с Flow и уведомляет подписчиков о любых изменениях в наблюдаемых таблицах.

@Dao
interface UserDao {
    @Query("SELECT * FROM users")
    fun getUsers(): Flow<List<User>>
}

// В ViewModel
val users: Flow<List<User>> = userDao.getUsers()

// В UI (Compose)
LaunchedEffect(Unit) {
    viewModel.users.collect { users ->
        // Будет вызываться при каждом изменении таблицы users
    }
}

Важные моменты:

  1. Flow работает асинхронно и не блокирует UI
  2. Подписка активна до отмены (например, при уничтожении ViewModel)
  3. Room автоматически управляет уведомлениями об изменениях
  4. По умолчанию Flow запускается в Dispatchers.IO