Magazyn danych
Najnowsza aktualizacja | Wersja stabilna | Kandydat do publikacji | Wersja Beta | Wersja alfa |
---|---|---|---|---|
1 maja 2024 r. | 1.1.1 | - | - | - |
Deklarowanie zależności
Aby dodać zależność od DataStore, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Google Maven.
Istnieją 2 implementacje magazynu danych: Preferencje i Proto. Wybierz jeden lub drugi. Możesz też dodać do każdej implementacji zależności bez Androida.
W pliku build.gradle
swojej aplikacji lub modułu dodaj zależności potrzebne do wdrożenia:
Preferencje (DataStore)
Odlotowy
// Preferences DataStore (SharedPreferences like APIs) dependencies { implementation "androidx.datastore:datastore-preferences:1.1.1" // optional - RxJava2 support implementation "androidx.datastore:datastore-preferences-rxjava2:1.1.1" // optional - RxJava3 support implementation "androidx.datastore:datastore-preferences-rxjava3:1.1.1" } // Alternatively - use the following artifact without an Android dependency. dependencies { implementation "androidx.datastore:datastore-preferences-core:1.1.1" }
Kotlin
// Preferences DataStore (SharedPreferences like APIs) dependencies { implementation("androidx.datastore:datastore-preferences:1.1.1") // optional - RxJava2 support implementation("androidx.datastore:datastore-preferences-rxjava2:1.1.1") // optional - RxJava3 support implementation("androidx.datastore:datastore-preferences-rxjava3:1.1.1") } // Alternatively - use the following artifact without an Android dependency. dependencies { implementation("androidx.datastore:datastore-preferences-core:1.1.1") }
Proto DataStore
Odlotowy
// Typed DataStore (Typed API surface, such as Proto) dependencies { implementation "androidx.datastore:datastore:1.1.1" // optional - RxJava2 support implementation "androidx.datastore:datastore-rxjava2:1.1.1" // optional - RxJava3 support implementation "androidx.datastore:datastore-rxjava3:1.1.1" } // Alternatively - use the following artifact without an Android dependency. dependencies { implementation "androidx.datastore:datastore-core:1.1.1" }
Kotlin
// Typed DataStore (Typed API surface, such as Proto) dependencies { implementation("androidx.datastore:datastore:1.1.1") // optional - RxJava2 support implementation("androidx.datastore:datastore-rxjava2:1.1.1") // optional - RxJava3 support implementation("androidx.datastore:datastore-rxjava3:1.1.1") } // Alternatively - use the following artifact without an Android dependency. dependencies { implementation("androidx.datastore:datastore-core:1.1.1") }
Opinia
Twoja opinia pomoże nam ulepszyć Jetpack. Daj nam znać, jeśli znajdziesz nowe wydania lub masz pomysły na ulepszenie tej biblioteki. Zanim utworzysz nową bibliotekę, przejrzyj problemy z tą biblioteką. Możesz oddać głos w ramach istniejącego problemu, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 1.1
Wersja 1.1.1
1 maja 2024 r.
Aplikacja androidx.datastore:datastore-*:1.1.1
została zwolniona. Wersja 1.1.1 zawiera te zatwierdzenia.
Poprawki błędów
- Zmniejszono liczbę fałszywych alarmów w systemie Linux na podstawie komunikatu „Wystąpił zakleszczenie zasobów” w narożniku w przypadku wielu wystąpień
DataStore
, które próbują zapisać dane z różnych procesów, cofając blokadę pliku.
Wersja 1.1.0
17 kwietnia 2024 r.
Aplikacja androidx.datastore:datastore-*:1.1.0
została zwolniona. Wersja 1.1.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 1.0.0
Aby uzyskać więcej informacji, zapoznaj się z informacjami o wersjach alfa i beta wersji 1.1.0. Oto niektóre z najważniejszych aktualizacji wersji 1.1.0:
- DataStore obsługuje teraz wiele procesów uzyskujących dostęp do tego samego pliku, a także zapewnia dostrzegalność w różnych procesach.
- Nowy interfejs Storage umożliwia dostosowanie sposobu przechowywania lub serializacji modeli danych.
- Możesz teraz używać DataStore w projektach wieloplatformowych Kotlin.
Wersja 1.1.0-rc01
3 kwietnia 2024 r.
Aplikacja androidx.datastore:datastore-*:1.1.0-rc01
została zwolniona. Wersja 1.1.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono spadek wydajności, który powodował, że wywołania
updateData
nie były optymalizowane pod kątem zapisu na dysku, jeśli nowe dane są takie same jak stare (d64cfb5). - Naprawiono warunek wyścigu, w którym
MultiProcess
DataStore
mógł nie uwzględniać nieprawidłowych informacji podczas inicjowania. (b/326141553),(094c2dd)
Wersja 1.1.0-beta02
6 marca 2024 roku
Aplikacja androidx.datastore:datastore-*:1.1.0-beta02
została zwolniona. Wersja 1.1.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Funkcja poprawiania wydajności
DataStore
zbiera powiadomienia o aktualizacjach tylko wtedy, gdy zostanie zauważona. (b/267792241)- Pamiętaj, że ta zmiana może spowodować uruchomienie funkcji
UncompletedCoroutinesError
w testach, jeśli używasz biblioteki testów Coroutines. Aby uniknąć tego problemu, podczas inicjowania testuDataStore
musisz ukończyć testTestScope.backgroundScope
.
- Pamiętaj, że ta zmiana może spowodować uruchomienie funkcji
- Rozwiązaliśmy problem zagnieżdżonych wywołań
updateData
w tej samej instancji, które powodowały zakleszczenie. (b/241760537) - Sprawiono, że interfejs
DataStore
nie będzie już generować żądańIOExceptions
, jeśli podczas migracji nie uda się usunąćSharedPreferences
. (b/195553816) - Rozwiązaliśmy problem, który powodował, że zmiana nazwy pliku nie powiodła się podczas działania
updateData
w środowiskach JVM bez Androida. (b/203087070) - Rozwiązaliśmy problem, który powodował, że po zainicjowaniu
DataStore
usługaCorruptionException
nie jest obsługiwana. (b/289582516)
Wersja 1.1.0-beta01
10 stycznia 2024 r.
Wersja androidx.datastore:datastore-*:1.1.0-beta01
została udostępniona bez zmian od 1.1.0-alpha07
. Wersja 1.1.0-beta01 zawiera te zatwierdzenia.
Wersja 1.1.0-alfa07
29 listopada 2023 r.
Aplikacja androidx.datastore:datastore-*:1.1.0-alpha07
została zwolniona. Wersja 1.1.0-alpha07 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Metody
MultiProcessDataStoreFactory
nie są już eksperymentalne.Adnotacja@ExperimentalMultiProcessDataStore
została całkowicie usunięta. (Ieee54, I8e607)
Poprawki błędów
- Wdrożyć usuwanie adnotacji
@ExperimentalMultiProcessDataStore
w wersji 1.1.0-alfa07. (I8e607)
Wersja 1.1.0-alfa06
1 listopada 2023 roku
Aplikacja androidx.datastore:datastore-*:1.1.0-alpha06
została zwolniona. Wersja 1.1.0-alpha06 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Metoda fabryczna systemu
createSingleProcessCoordinator
otrzymuje teraz ścieżkę pliku (String
,java.io.File
iokio.Path
), aby zachować spójność ze standardemcreateMultiProcessCoordinator
. (I211c8, b/305755935)
Wersja 1.1.0-alfa05
6 września 2023 r.
Aplikacja androidx.datastore:datastore-*:1.1.0-alpha05
została zwolniona. Wersja 1.1.0-alpha05 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Baza danych
FileStorage
jest teraz publicznie dostępna, więc klienci mogą dostarczać parametry niestandardowe. (Icb985) - Zmieniono konstruktor
OkioStorage
, aby akceptował konstruktorInterProcessCoordinator
, aby można było go używać na Androidzie z funkcjąMultiProcessCoordinator
. (Iecea3)
Poprawki błędów
- Naprawiono
MultiProcessCoordinator
, który nie pozwala na monitorowanie wielu plików w tym samym katalogu. - Rozwiązanie problemu nie wykrywa duplikatów plików, jeśli ścieżki do plików nie są znormalizowane.
- Popraw nieprawidłowe wartości zwrócone przez funkcję
RxDataStore#isDisposed
. - Naprawiono brakującą konfigurację ProPard dla artefaktu
datstore-preferences-core
.
Wersja 1.1.0-alfa04
5 kwietnia 2023 r.
Aplikacja androidx.datastore:datastore-*:1.1.0-alpha04
została zwolniona. Wersja 1.1.0-alpha04 zawiera te zatwierdzenia.
Poprawki błędów
- Ulepsz implementację wewnętrzną, aby uniknąć sytuacji wyścigowej, w której przepływ danych w funkcji
DataStore
może powodować wydawanie starszej wartości po aktualizacji.
Wersja 1.1.0-alfa03
24 marca 2023 r.
Aplikacja androidx.datastore:datastore-*:1.1.0-alpha03
została zwolniona.
Poprawki błędów
- Usunięto ograniczenia zależności z artefaktów Maven, aby obejść problem z kompilacją w natywnych celach Kotlin (b/274786186, KT-57531).
Wersja 1.1.0-alfa02
22 marca 2023 r.
Aplikacja androidx.datastore:datastore-*:1.1.0-alpha02
została zwolniona. Wersja 1.1.0-alpha02 zawiera te zatwierdzenia.
Uwaga
Zwróć uwagę, że ta wersja zawiera ważną, wewnętrzną refaktoryzację, która scala wdrożenia w implementacji DataStore jednego i wieloprocesowego. Zwracaj uwagę na możliwe niezamierzone zmiany działania (np. czas wyświetlania powiadomień o aktualizacjach). Aby zgłosić takie zmiany, możesz użyć komponentu Issue Tracker.
Nowe funkcje
- Z usługi
DataStore
możesz teraz korzystać w projektach KMM. Pamiętaj, że elementy docelowe DataStore na urządzeniach innych niż Android są nadal w fazie eksperymentalnej, ale zdecydowaliśmy się scalić wersje, aby ułatwić deweloperom ich wypróbowanie. - Funkcje wieloprocesowe zostały przeniesione z
androidx.datastore.multiprocess
doandroidx.datastore.core
. - W
androidx.datastore.core.MultiProcessDataStoreFactory
dodaj nową metodę fabryczną, aby utworzyć instancje DataStore z obiektamiStorage
na potrzeby operacji na plikach. - Dodano nowy interfejs
InterProcessCoordinator
, który ułatwia komunikację między wieloma instancjami DataStore. Pamiętaj, że wieloprocesowa implementacjaInterProcessCoordinator
jest dostępna tylko na Androidzie.
Zmiany w interfejsie API
- Dodaj
InterProcessCoordinator
do tabeliStorageConnection
w interfejsie datastore-core (I555bb) - Zmień interfejsy API w rdzeń datastore
MultiProcessDataStoreFactory
, aby używać miejsca na dane. (Iac02f). - Przenieś publiczne interfejsy API w Datastore-multiprocess do datastore-core (I76d7c)
- Zasób
PreferencesSerializer
został ujawniony z rdzeni datastore-preferences-core (I4b788) - Dodawanie adnotacji
@JvmDefaultWithCompatibility
(I8f206)
Wersja 1.1.0-alfa01
9 listopada 2022 r.
Aplikacja androidx.datastore:datastore-*:1.1.0-alpha01
została zwolniona. Wersja 1.1.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
- Obsługuje przypadki użycia w wielu procesach, w których gwarantowana spójność danych w instancjach
DataStore
w różnych procesach jest gwarantowana. DodajMultiProcessDataStoreFactory#create
, aby utworzyć takie instancjeDataStore
. - Nowy interfejs pamięci masowej, który umożliwia wyłączenie podstawowego mechanizmu przechowywania danych
Datastore
. Dostępne są wdrożenia java.io i okio.DataStore
fabryki mają nowe metody, które akceptują ten obiekt Cloud Storage.
Zmiany w interfejsie API
- Zmień interfejsy API w rdzeń datastore
MultiProcessDataStoreFactory
, aby używać miejsca na dane. (Iac02f). - Przenieś publiczne interfejsy API w Datastore-multiprocess do datastore-core (I76d7c)
- Zasób
PreferencesSerializer
został ujawniony z rdzeni datastore-preferences-core (I4b788)
Wersja 1.0.0
Wersja 1.0.0
4 sierpnia 2021 r.
Aplikacja androidx.datastore:datastore-*:1.0.0
została zwolniona. Wersja 1.0.0 zawiera te zatwierdzenia.
Główne funkcje wersji 1.0.0
Jetpack DataStore to rozwiązanie do przechowywania danych, które umożliwia przechowywanie par klucz-wartość lub wpisanych obiektów z buforami protokołów. DataStore korzysta z współprogramów Kotlin i Flow do asynchronicznego, spójnego i transakcyjnego przechowywania danych.
Wersja 1.0.0-rc02
21 lipca 2021 r.
Aplikacja androidx.datastore:datastore-*:1.0.0-rc02
została zwolniona. Wersja 1.0.0-rc02 zawiera te zatwierdzenia.
Poprawki błędów
- Wyjaśnij, że
SharedPreferencesMigration
nie działa, jeśli nie ma kluczy. (Icfa32, b/192824325) - Popraw błąd, w wyniku którego element
SharedPreferencesMigration
utworzony za pomocąMIGRATE_ALL_KEYS
zgłasza wyjątek, jeśli żądany klucz jeszcze nie istnieje. (Ie318a, b/192824325)
Wersja 1.0.0-rc01
30 czerwca 2021 r.
Aplikacja androidx.datastore:datastore-*:1.0.0-rc01
została zwolniona. Wersja 1.0.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono błąd polegający na tym, że plik .java został nieumyślnie dodany do ostatecznego pliku jar (I65d96, b/188985637).
Wersja 1.0.0-beta02
16 czerwca 2021 r.
Aplikacja androidx.datastore:datastore-*:1.0.0-beta02
została zwolniona. Wersja 1.0.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Napraw
ClassVerificationFailure
(b/187450483)
Wersja 1.0.0-beta01
21 kwietnia 2021 r.
Aplikacja androidx.datastore:datastore-*:1.0.0-beta01
została zwolniona. Wersja 1.0.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Usuń przeciążenia JVM dla metod obejmujących tylko kotlin (I2adc7)
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że przekazywanie dostępu do magazynu danych mogło powodować wyciek kontekstów (Ie96fc, b/184415662).
Wersja 1.0.0-alfa08
10 marca 2021 r.
Aplikacja androidx.datastore:datastore-*:1.0.0-alpha08
została zwolniona. Wersja 1.0.0-alpha08 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Do przedstawicieli usług
dataStore
ipreferencesDataStore
możesz teraz dodać migrację zależną od kontekstu. (I4ef69, b/173726702) - Dodaje funkcje pomocnicze umożliwiające uzyskanie nazwy pliku, jeśli nie używasz już delegata magazynu danych lub kontekstu.createDataStore (I60f9a)
- Zawieszono działanie programów Serializer writeTo i readFrom. Jeśli masz zaimplementowany Serializer, musisz zaktualizować swoje funkcje, by były zawieszane. (I1e58e)
- Dodano przedstawicieli do właściwości dla użytkowników RxDataStore. (Ied768, b/173726702)
Poprawki błędów
- Egzekwuj ograniczenia dotyczące publicznego użytkowania eksperymentalnych interfejsów API (I6aa29, b/174531520)
Wersja 1.0.0-alfa07
24 lutego 2021 r.
Aplikacja androidx.datastore:datastore-*:1.0.0-alpha07
została zwolniona. Wersja 1.0.0-alpha07 zawiera te zatwierdzenia.
Zmiany w interfejsie API
Funkcja rozszerzenia
Context.createDataStore
została usunięta i zastąpiona funkcją delegata właściwości globalDataStore. Wywołaj raz globalDataStore na najwyższym poziomie w pliku kotlin. Przykład:val Context.myDataStore by dataStore(...)
Umieść go na najwyższym poziomie pliku kotlin, aby było tylko jedno jego wystąpienie. (I57215, b/173726702)
Funkcje RxDataStore są teraz w klasie RxDataStore, a nie jako funkcje rozszerzenia w DataStore. (Idccdb, b/177691248)
Jeśli chcesz przeprowadzić migrację EncryptedSharedPreferences (lub bezpośredniego rozruchu SharedPreferences) do DataStore, możesz to zrobić teraz za pomocą nowego konstruktora SharedPreferencesMigrate, które umożliwia wstrzykiwanie wartości SharedPreferences. (I8e04e, b/177278510)
Poprawki błędów
- DataStore będzie teraz zgłaszać wyjątek, jeśli dla tego samego pliku istnieje wiele aktywnych magazynów danych. Jeśli nie zarządzałeś magazynem danych jako singleton lub nie gwarantowałeś, że żadne 2 instancje DataStore nie są jednocześnie aktywne dla pliku, teraz możesz zauważyć wyjątki podczas odczytu lub zapisu w DataStore. Możesz to naprawić, zarządzając magazynem danych jako singleton. (Ib43f4, b/177691248)
- Napraw działanie związane z anulowaniem w przypadku anulowania zakresu wywołującego. (I2c7b3)
Wersja 1.0.0-alfa06
13 stycznia 2021 r.
Aplikacja androidx.datastore:datastore-*:1.0.0-alpha06
została zwolniona. Wersja 1.0.0-alpha06 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano kody RxJava na potrzeby DataStore. Artefakty
datastore-rxjava2/3
zawierają opakowania podstawowych interfejsów DataStore API (RxDataStore
,RxDataStoreBuilder
iRxDataMigration
). Artefaktydatastore-preferences-rxjava2/3
zawierają monter do tworzenia preferencji DataStore.
Zmiany w interfejsie API
- Ukryj interfejs CorruptionHandler. Nie było powodu, dla którego miała być publiczna, ponieważ fabryka DataStore akceptuje tylko obiekt ReplaceFileCorruptionHandler. (I0b3b3, b/176032264)
- Metoda
preferencesKey<T>(name: String): Key<T>
została usunięta i zastąpiona metodami specyficznymi dla każdego obsługiwanego typu, na przykładpreferencesKey<Int>("int")
to terazintPreferencesKey("int")
(Ibcfac, b/170311106)
Poprawki błędów
- Poprawki w dokumentacji dotyczącej DataStoreFactory, w której pominięto fakt, że plik datastore jest tworzony w podkatalogu „datastore/”. (Ica222)
Wersja 1.0.0-alfa05
Grudzień 2, 2020
Aplikacja androidx.datastore:datastore-*:1.0.0-alpha05
została zwolniona. Wersja 1.0.0-alpha05 zawiera te zatwierdzenia.
Poprawki błędów
- Dodaj lepszą dokumentację i wyjątki dotyczące równoczesnych zapisów z magazynów danych. (Ia98a2, b/173522155, b/173726702)
- Teraz zezwalamy (ale nie wymagamy) na zamknięcie obiektu outputStream za pomocą funkcji
Serializer.writeTo()
. (I5c9bf, b/173037611)
Wersja 1.0.0-alfa04
17 listopada 2020 r.
Aplikacja androidx.datastore:datastore-*:1.0.0-alpha04
została zwolniona. Wersja 1.0.0-alpha04 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem z pakietem, który spowodował tę awarię w magazynie ustawień
1.0.0-alpha03
preferencji:java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/preferences
- Awaria została pierwotnie zgłoszona tutaj: b/173036843
- (I4712d, b/173036843)
Wersja 1.0.0-alfa03
11 listopada 2020 roku
Aplikacja androidx.datastore:datastore-*:1.0.0-alpha03
została zwolniona. Wersja 1.0.0-alpha03 zawiera te zatwierdzenia.
Nowe funkcje
- Ustawienia obsługują teraz wartości podwójne, co jest przydatne, jeśli potrzebujesz większej precyzji niż liczby zmiennoprzecinkowe (I5be8f, b/169471808).
Zmiany w interfejsie API
- Aby przyspieszyć kompilację, utworzono zależność wyłącznie od kotlin dla magazynu danych.
androidx.datastore:datastore-core
zawiera podstawowe interfejsy API obsługujące wyłącznie kotlin, aandroidx.datastore:datastore
zawiera interfejsy API, które zależą od Androida (w tymSharedPreferencesMigration
i konstruktorContext.createDataStore
.)(I42d75, b/168512698) - Podział celów na magazyn danych preferencji w celu szybszej kompilacji kotlin (Ia3c19)
Serializatory wymagają teraz nowej właściwości dla wartości domyślnej, która będzie używana w przypadku braku danych na dysku. Ułatwia to implementację niestandardowych serializatorów, dzięki czemu użytkownicy nie muszą wpisywać specjalnych wielkości liter w strumieniach wejściowych (puste strumienie wejściowe nie są analizowane w pliku json).
- Można też sprawdzić, czy strumień wyjściowy podany w funkcji writeTo() nie jest zamknięty, a jeśli jest zamknięty, zgłasza wyjątki (I16e29).
Tworzenie konstruktora dla elementu SharedPreferencesView jako wewnętrznego. Pierwotnie była ona publiczna, aby można było ją przetestować. Zamiast tego warto utworzyć plik SharedPreferencesMigrate i przetestować go. (I93891)
Poprawki błędów
- Parametr
produceFile
wDataStoreFactory
iPreferenceDataStoreFactory
jest teraz ostatnim parametrem na liście, więc umożliwia korzystanie ze składni lambda końcowego kotlin. (Ibe7f1, b/169425442) - Przestrzegaj nowych wyraźnych wymagań dotyczących interfejsu API dla narzędzia kotlin (I5ae1e).
Znane problemy
- W Datastore w klasyfikacji preferencji występują awarie w przypadku błędu
java.lang.NoClassDefFoundError
. (b/173036843)
Wersja 1.0.0-alfa02
14 października 2020 r.
Opublikowano androidx.datastore:datastore-core:1.0.0-alpha02
i androidx.datastore:datastore-preferences:1.0.0-alpha02
. Wersja 1.0.0-alpha02 zawiera te zatwierdzenia.
Poprawki błędów
- Dodano zabezpieczenie przed mutacją w rdzeniu datastore. Mutacja powoduje przerwanie wykorzystania magazynu danych w przypadku osób korzystających z magazynu danych z typami innymi niż proto lub bez preferencji (I6aa84)
- Do pliku Preferences.kt dodano metodę
toString
, aby ułatwić debugowanie bieżącego stanu (I96006) - Dodano wyjątek mający na celu ochronę przed niewłaściwym użyciem usługi
DataStore.Preferences
(I1134d) - Usunięto błąd, który powodował awarię aplikacji przy uruchamianiu (I69237, b/168580258).
Wersja 1.0.0-alfa01
2 września 2020 r.
Opublikowano androidx.datastore:datastore-core:1.0.0-alpha01
i androidx.datastore:datastore-preferences:1.0.0-alpha01
. Wersja 1.0.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
Jetpack DataStore to nowe, ulepszone rozwiązanie do przechowywania danych, które ma zastąpić narzędzie SharedPreferences. Bazujący na współpracownikach Kotlin i przepływie danych DataStore udostępnia 2 różne implementacje:
- Proto DataStore, która umożliwia przechowywanie obiektów typów (wspieranych przez bufory protokołów).
- Preferencje DataStore, gdzie przechowywane są pary klucz-wartość
Dane są przechowywane asynchronicznie, w spójny i transakcyjny sposób, przez co eliminuje większość wadów wspólnych preferencji.