DataStore — это относительно новый метод хранения постоянных данных типа ключ-значение в Android, призванный стать лучшей заменой SharedPreferences.
Существует 2 типа DataStore:
- Хранилище данных настроек
- Proto DataStore (или DataStore Typed)
В этой первой статье мы создадим простое приложение, демонстрирующее использование первого типа DataStore, Preferences DataStore.
Где исходный код?
tl;dr
а. О хранилище данных
Ключевые преимущества использования DataStore вместо SharedPreferences, на мой взгляд, заключаются в следующем:
- DataStore использует Flow (Flow очень похож на LiveData, где вы можете наблюдать за значением каждый раз, когда оно изменяется). SharedPreferences не имеет встроенной поддержки Flow.
- Proto DataStore предлагает безопасность типов. SharedPreferences (и Preferences DataStore) не обеспечивают безопасность типов.
б. О хранилище данных настроек
Вот Preferences DataStore в действии:
Как вы можете видеть выше, с Preferences DataStore это приложение сохраняет несколько примитивных типов данных:
Также возможно сохранить эти примитивные типы: Double
, Float
, Long
и Set<String>
.
Пошаговое объяснение
Вот как вы делаете приложение, показанное на изображении выше.
1. Откройте Android Studio. Создайте новый проект с опцией «Пустая активность».
2. Добавьте зависимости datastore-preferences
и lifecycle-runtime-ktx
в файл app/build.gradle
. Нам нужна библиотека Lifecycle, потому что нам нужно использовать Coroutine, чтобы иметь возможность использовать Flow.
3. Далее строим макет, activity_main.xml
. Вот как это выглядит и необходимый код ниже:
4. Наконец, мы собираемся обновить файл MainActivity.kt
. Вы можете напрямую скопировать и вставить приведенный ниже код, но вот краткое описание того, как это работает. Сначала мы получаем объект DataStore с помощью preferencesDataStore
. Затем для каждого примитивного типа данных (Int
, String
и Boolean
) мы извлекаем предыдущее сохраненное значение DataStore, а также устанавливаем прослушиватель для обновления значения DataStore.
5. Вот и все! Теперь запустите приложение на своем устройстве и попробуйте сами. Попробуйте обновить значения несколько раз, а затем закрыть приложение. При повторном открытии приложения значения должны быть сохранены.
Спасибо за чтение!