Почему не нужна функция запроса в Room add suspend, ключевое слово в Kotlin? - PullRequest
1 голос
/ 30 марта 2020

Я изучаю сопрограммы Kotlin.

Код А взят из арктического https://github.com/googlecodelabs/android-room-with-a-view

Я считаю, что ключевое слово suspend добавляется для функция вставки и удаления.

Почему не нужна функция запроса getAlphabetizedWords() в ключевом слове Room add suspend в Kotlin? Я думаю, что некоторые функции запросов должны тратить много времени на работу, поэтому они должны работать в сопрограммах.

Код A

@Dao
interface WordDao {

    // LiveData is a data holder class that can be observed within a given lifecycle.
    // Always holds/caches latest version of data. Notifies its active observers when the
    // data has changed. Since we are getting all the contents of the database,
    // we are notified whenever any of the database contents have changed.
    @Query("SELECT * from word_table ORDER BY word ASC")
    fun getAlphabetizedWords(): LiveData<List<Word>>

    @Insert(onConflict = OnConflictStrategy.IGNORE)
    suspend fun insert(word: Word)

    @Query("DELETE FROM word_table")
    suspend fun deleteAll()
}

1 Ответ

1 голос
/ 30 марта 2020

Вам не нужно делать этот вызов асинхронным образом, поскольку он работает таким образом уже под капотом. Если вам нужен только объект List<Word> (без LiveData), было бы лучше, если бы вы сделали эту функцию приостановленной, чтобы вызывать ее из сопрограммы или другой функции приостановки.

Room генерирует весь необходимый код обновить объект LiveData при обновлении базы данных. Сгенерированный код выполняет запрос асинхронно в фоновом потоке, когда это необходимо. Этот шаблон полезен для синхронизации данных, отображаемых в пользовательском интерфейсе, с c с данными, хранящимися в базе данных.

Вы можете проверить эту информацию и узнать больше о LiveData в Android Development Руководства по документации в разделе «Использование LiveData with Room» раздел здесь .

...