Получите бесплатно 4 курса для лёгкого старта работы в IT
Получить курсы бесплатно
ГлавнаяБлогИзучаем LiveData в Android: postValue или setValue?
Изучаем LiveData в Android: postValue или setValue?
8 460
Время чтения: 5 минут

Изучаем LiveData в Android: postValue или setValue?

8 460
Время чтения: 5 минут
Сохранить статью:
Сохранить статью:

В статье рассказывается:

  1. Что такое LiveData?
  2. Разница между setValue и postValue
  3. Пройди тест и узнай, какая сфера тебе подходит:
    айти, дизайн или маркетинг.
    Бесплатно от Geekbrains

Разработчикам Android часто приходится иметь дело с различными данными. Данные с одного экрана могут использоваться на другом. А ещё можно поменять внешний вид экрана, если данные обновились. Основная задача состоит в том, чтобы наладить эффективное взаимодействие между экраном и источником данных. Лучший способ это сделать — использовать LiveData, которая является частью Android Jetpack.

Узнай, какие ИТ - профессии
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Павел Симонов - исполнительный директор Geekbrains
Павел Симонов
Исполнительный директор Geekbrains
Команда GeekBrains совместно с международными специалистами по развитию карьеры подготовили материалы, которые помогут вам начать путь к профессии мечты.
Подборка содержит только самые востребованные и высокооплачиваемые специальности и направления в IT-сфере. 86% наших учеников с помощью данных материалов определились с карьерной целью на ближайшее будущее!

Скачивайте и используйте уже сегодня:

Павел Симонов - исполнительный директор Geekbrains
Павел Симонов
Исполнительный директор Geekbrains
pdf иконка

Топ-30 самых востребованных и высокооплачиваемых профессий 2023

Поможет разобраться в актуальной ситуации на рынке труда

doc иконка

Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка

Только проверенные нейросети с доступом из России и свободным использованием

pdf иконка

ТОП-100 площадок для поиска работы от GeekBrains

Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽

pdf 3,7mb
doc 1,7mb
Уже скачали 27821 pdf иконка

Чаще всего в LiveData используют методы setValue и postValue. Если судить по названию, кажется, что они выполняют одинаковую работу. Но на самом деле это не так.

Давайте разбираться, в чём разница.

Что такое LiveData?

Согласно документации, LiveData — это класс, который содержит данные и за поведением которого можно наблюдать (observable). В отличие от классического observable, LiveData знает о жизненном цикле активити, фрагмента, сервиса и других компонентов Android, связанных с циклом.

Если говорить простыми словами, LiveData — это контейнер, который следит за жизненным циклом экрана и снабжает его данными, когда это уместно. Например, если активити находится на переднем плане и видна пользователю. Ценность такого подхода заключается в том, что LiveData не будет снабжать ваш экран данными, если он свёрнут или закрыт. Но как только экран появится перед пользователем, обновление данных возобновится.

Это даёт LiveData несколько преимуществ:

  • нет утечек памяти;
  • экран всегда содержит актуальные данные;
  • никаких крашей из-за обновления данных, если активити закрывается.

Дополнительные материалы по LiveData.

Разница между setValue и postValue

Разберём на примере, зачем нужны такие похожие методы. Предположим, вам нужно обновить данные на экране с помощью LiveData. Вы можете сделать это в основном потоке приложения (Main thread) или в отдельном. При обновлении в основном потоке вы используете setValue у класса MutableLiveData. А при обновлении данных для основного потока из фонового нужно использовать метод postValue.

Это значит, что метод setValue уместен в основном потоке приложения, а postValue — если данные приходят из фонового потока.

Вот чек-лист, чтобы не запутаться, когда какой метод нужен:

  • Если вы выполняете работу в основном потоке, то setValue и postValue будут работать одинаково.
  • Если вы выполняете работу в фоновом потоке, то можете использовать только postValue. Дело в том, что данные в LiveData изменятся сразу, а вот их обновление в основном потоке будет происходить асинхронно при помощи Handler.
Дарим скидку от 60%
на курсы от GeekBrains до 28 апреля
Уже через 9 месяцев сможете устроиться на работу с доходом от 150 000 рублей
Забронировать скидку

В коде это будет выглядеть так:

// setValue
liveData.setValue("someNewData")
liveData.setValue("againNewData")
// postValue
Thread() {
liveData.postValue("someNewData")
liveData.postValue("againNewData")
}.start

Здесь для разных потоков используются разные методы. Метод setValue вызывается два раза. Это значит, что экран обновится дважды, потому что код выполняется в основном потоке приложения. Метод postValue выполняется асинхронно, поэтому обновление экрана будет зависеть от работы основного потока.

Только до 25.04
Скачай подборку материалов, чтобы гарантированно найти работу в IT за 14 дней
Список документов:
ТОП-100 площадок для поиска работы от GeekBrains
20 профессий 2023 года, с доходом от 150 000 рублей
Чек-лист «Как успешно пройти собеседование»
Чтобы получить файл, укажите e-mail:
Введите e-mail, чтобы получить доступ к документам
Подтвердите, что вы не робот,
указав номер телефона:
Введите телефон, чтобы получить доступ к документам
Уже скачали 52300

Иногда во время вызова метода liveData.postValue(«someNewData») экран ещё не открыт или приложение свёрнуто. А во время выполнения метода liveData.postValue(«againNewData») экран уже виден пользователю. Это значит, что на экране отобразятся только последние данные «againNewData».

При использовании postValue будьте внимательны. Если на эту LiveData никто не был подписан во время обновления данных, то вызов getValue их вам не вернёт.

Надеемся, что эта статья помогла вам узнать немного больше об использовании LiveData, особенно в контексте асинхронной работы, которой так много в разработке под Android.

Этот материал — перевод статьи LiveData setValue vs postValue in Android.

Оцените статью
Рейтинг: 5
( голосов 1 )
Поделиться статьей
Добавить комментарий

Сортировать:
По дате публикации
По рейтингу
До конца акции осталось
0 дней 00:00:00
Дарим скидку 64% на обучение «Разработчик»
  • Получите новую профессию с гарантией трудоустройства
  • Начните учиться бесплатно, 3 месяца обучения в подарок
Забронировать скидку на обучение
Забрать подарок

Получите подробную стратегию для новичков на 2023 год, как с нуля выйти на доход 200 000 ₽ за 7 месяцев

Подарки от Geekbrains из закрытой базы:
Осталось 17 мест

Поздравляем!
Вы выиграли 4 курса по IT-профессиям.
Дождитесь звонка нашего менеджера для уточнения деталей

Иван Степанин
Иван Степанин печатает ...