Magazyn danych
Najnowsza aktualizacja | Wersja stabilna | Kandydat do wydania | Wersja Beta | Wydanie alfa |
---|---|---|---|---|
1 maja 2024 r. | 1.1.1 | - | - | - |
Deklarowanie zależności
Aby dodać zależność w DataStore, musisz dodać repozytorium Google Maven do swojego w projektach AI. Zapoznaj się z repozytorium Google Maven. .
Są 2 implementacje magazynu danych: Preferences i Proto. Wybierz jeden lub drugi. Możesz też dodać zależności niewymagające Androida do implementacji.
Dodaj zależności wymagane do implementacji w pliku build.gradle
aplikacji lub modułu:
Preferencje DataStore
Odlotowe
// 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") }
Magazyn danych Proto
Odlotowe
// 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 odkryjesz nowe problemy jak ulepszyć tę bibliotekę. Przyjrzyj się istniejące problemy w tej bibliotece, zanim utworzysz nową. Możesz zagłosować nad istniejącym problemem przez klikając przycisk gwiazdki.
Zobacz dokumentację narzędzia Issue Tracker. .
Wersja 1.1
Wersja 1.1.1
1 maja 2024 r.
Usługa androidx.datastore:datastore-*:1.1.1
została zwolniona. Wersja 1.1.1 zawiera te zatwierdzenia.
Poprawki błędów
- Złagodzono fałszywy alarm w Linuksie, w wyniku czego wystąpiło zakleszczenie zasobów w narożnym przypadku, gdy wiele instancji
DataStore
próbuje zapisywać dane z różnych procesów przez wycofywanie blokady pliku.
Wersja 1.1.0
17 kwietnia 2024 r.
Usługa 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 dowiedzieć się więcej, zapoznaj się z informacjami o wersjach 1.1.0 alfa i beta. Najważniejsze aktualizacje w wersji 1.1.0 to:
- DataStore obsługuje teraz dostęp do tego samego pliku przez wiele procesów, co zapewnia możliwość obserwacji różnych procesów.
- Nowy interfejs pamięci masowej pozwala dostosować sposób przechowywania lub serializowania modeli danych.
- Możesz teraz używać DataStore w projektach wieloplatformowych Kotlin.
Wersja 1.1.0-rc01
3 kwietnia 2024 r.
Usługa 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 funkcji
updateData
nie optymalizowały optymalizacji podczas zapisywania na dysku, jeśli nowe dane są takie same jak stare dane (d64cfb5). - Naprawiono warunek wyścigu, w którym
MultiProcess
DataStore
może nie unieważnić unieważnienia podczas inicjowania. (b/326141553),(094c2dd))
Wersja 1.1.0-beta02
6 marca 2024 roku
Usługa androidx.datastore:datastore-*:1.1.0-beta02
została zwolniona. Wersja 1.1.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Poprawa wydajności w systemie
DataStore
zbiera powiadomienia o aktualizacjach tylko wtedy, gdy zostanie zaobserwowana. (b/267792241)- Jeśli używasz biblioteki testów Coroutines, ta zmiana może spowodować uruchomienie testów
UncompletedCoroutinesError
w testach. Aby uniknąć tego problemu, podczas inicjowania testuDataStore
w testach musisz uzyskaćTestScope.backgroundScope
.
- Jeśli używasz biblioteki testów Coroutines, ta zmiana może spowodować uruchomienie testów
- Rozwiązaliśmy problem zagnieżdżonych wywołań
updateData
w tej samej instancji, który powodował zakleszczenie. (b/241760537) - Wykonana czynność
DataStore
nie zgłasza już żądaniaIOExceptions
, jeśli podczas migracji nie uda się usunąćSharedPreferences
. (b/195553816) - Rozwiązaliśmy problem, który powodował, że podczas
updateData
nie można było zmienić nazwy pliku w środowiskach JVM innych niż Android. (B/203087070) - Rozwiązaliśmy problem, który powodował, że po zainicjowaniu
DataStore
obiektCorruptionException
nie jest obsługiwany. (b/289582516)
Wersja 1.1.0-beta01
10 stycznia 2024 r.
Usługa 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-alpha07
29 listopada 2023 r.
Usługa androidx.datastore:datastore-*:1.1.0-alpha07
została zwolniona. Wersja 1.1.0-alfa07 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Metody
MultiProcessDataStoreFactory
nie są już eksperymentalne.Adnotacja@ExperimentalMultiProcessDataStore
została całkowicie usunięta. (Ieee54, I8e607)
Poprawki błędów
- Usuń adnotacje
@ExperimentalMultiProcessDataStore
w wersjach 1.1.0-alfa. (I8E607)
Wersja 1.1.0-alpha06
1 listopada 2023 roku
Usługa androidx.datastore:datastore-*:1.1.0-alpha06
została zwolniona. Wersja 1.1.0-alfa06 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Metoda fabryczna
createSingleProcessCoordinator
otrzymuje teraz ścieżkę pliku (String
,java.io.File
iokio.Path
), aby była zgodna zcreateMultiProcessCoordinator
. (I211c8, b/305755935)
Wersja 1.1.0-alpha05
6 września 2023 r.
Usługa androidx.datastore:datastore-*:1.1.0-alpha05
została zwolniona. Wersja 1.1.0-alfa05 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Datastore
FileStorage
jest teraz dostępny publicznie, więc klienty mogą udostępniać parametry niestandardowe. (Icb985) - Zmieniono konstruktor
OkioStorage
, aby akceptował konstrukcjęInterProcessCoordinator
, dzięki czemu można jej używać na Androidzie za pomocąMultiProcessCoordinator
. (Iecea3).
Poprawki błędów
- Napraw problem
MultiProcessCoordinator
, który nie może monitorować kilku plików w tym samym katalogu. - Rozwiązanie problemu nie wykrywa zduplikowanych plików, jeśli ścieżki do plików nie są znormalizowane.
- Popraw nieprawidłowe wartości zwrócone z metody
RxDataStore#isDisposed
. - Napraw brakującą konfigurację ProGuard dla
datstore-preferences-core
artefaktu.
Wersja 1.1.0-alfa04
5 kwietnia 2023 r.
Usługa androidx.datastore:datastore-*:1.1.0-alpha04
została zwolniona. Wersja 1.1.0-alfa04 zawiera te zatwierdzenia.
Poprawki błędów
- Ulepsz wewnętrzną implementację, aby uniknąć sytuacji wyścigu, w której przepływ danych w usłudze
DataStore
po aktualizacji może generować starszą wartość.
Wersja 1.1.0-alfa03
24 marca 2023 r.
Usługa androidx.datastore:datastore-*:1.1.0-alpha03
została zwolniona.
Poprawki błędów
- Usunęliśmy ograniczenia zależności z artefaktów Maven, aby obejść problem z kompilacją w natywnych miejscach docelowych Kotlin (b/274786186, KT-57531).
Wersja 1.1.0-alfa02
22 marca 2023 r.
Usługa androidx.datastore:datastore-*:1.1.0-alpha02
została zwolniona. Wersja 1.1.0-alfa02 zawiera te zatwierdzenia.
Uwaga
Ta wersja zawiera ważną refaktoryzację wewnętrzną, która obejmuje wdrożenia zarówno w przypadku pojedynczych, jak i wieloprocesowych implementacji DataStore. Zwracaj uwagę na możliwe niezamierzone zmiany w działaniu aplikacji (np. o czasie wysyłania powiadomień o aktualizacji). Aby zgłosić takie zmiany, możesz użyć komponentu Issue Tracker.
Nowe funkcje
- Możesz teraz używać identyfikatora
DataStore
w projektach KMM. Pamiętaj, że cele DataStore niepochodzące z Androida są nadal w fazie eksperymentalnej, ale postanowiliśmy scalić wersje, aby ułatwić deweloperom ich wypróbowanie. - Obiekty wieloprocesowe zostały przeniesione z
androidx.datastore.multiprocess
doandroidx.datastore.core
. - Dodaj w
androidx.datastore.core.MultiProcessDataStoreFactory
nową metodę fabryczną, aby tworzyć instancje DataStore z obiektamiStorage
na potrzeby operacji na plikach. - Dodaj nowy interfejs
InterProcessCoordinator
, który ułatwia komunikację wielu instancji DataStore między procesami. Pamiętaj, że wieloprocesowa implementacjaInterProcessCoordinator
jest dostępna tylko na urządzeniach z Androidem.
Zmiany interfejsu API
- Dodanie
InterProcessCoordinator
doStorageConnection
w interfejsie podstawowym Datastore (I555bb) - Zmień interfejsy API w rdzeniu datastore
MultiProcessDataStoreFactory
, aby korzystać z Cloud Storage. (IAC02f). - Przenieś publiczne interfejsy API w bazie datastore-multiprocess do rdzenia datastore (I76d7c)
- Narażono
PreferencesSerializer
z datastore-preferences-core (I4b788) - Dodawanie adnotacji
@JvmDefaultWithCompatibility
(I8f206)
Wersja 1.1.0-alpha01
9 listopada 2022 r.
Usługa androidx.datastore:datastore-*:1.1.0-alpha01
została zwolniona. Wersja 1.1.0-alfa01 zawiera te zatwierdzenia.
Nowe funkcje
- Obsługa przypadków użycia obejmujących wiele procesów, w których gwarantowana jest spójność danych między
DataStore
instancjami w różnych procesach. Aby utworzyć taką instancję (DataStore
), dodajMultiProcessDataStoreFactory#create
. - Nowy interfejs pamięci masowej, który umożliwia wyłączenie bazowego mechanizmu przechowywania danych w usłudze
Datastore
. Dostępne są implementacje dla java.io i okio. FabrykiDataStore
mają nowe metody, które akceptują ten obiekt Storage.
Zmiany interfejsu API
- Zmień interfejsy API w rdzeniu datastore
MultiProcessDataStoreFactory
, aby korzystać z Cloud Storage. (IAC02f). - Przenieś publiczne interfejsy API w bazie datastore-multiprocess do rdzenia datastore (I76d7c)
- Narażono
PreferencesSerializer
z datastore-preferences-core (I4b788)
Wersja 1.0.0
Wersja 1.0.0
4 sierpnia 2021 r.
Usługa androidx.datastore:datastore-*:1.0.0
została zwolniona. Wersja 1.0.0 zawiera te zatwierdzenia.
Główne funkcje 1.0.0
Jetpack DataStore to rozwiązanie do przechowywania danych, które umożliwia przechowywanie par klucz-wartość lub obiektów wpisywanych w buforach protokołów. DataStore wykorzystuje współrzędne i Flow Kotlin do przechowywania danych w sposób asynchroniczny, spójny i transakcyjny.
Wersja 1.0.0-rc02
21 lipca 2021 r.
Usługa 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) - Naprawiono błąd, w wyniku którego obiekt
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.
Usługa androidx.datastore:datastore-*:1.0.0-rc01
została zwolniona. Wersja 1.0.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Usunięto 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.
Usługa androidx.datastore:datastore-*:1.0.0-beta02
została zwolniona. Wersja 1.0.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiąż problem z kartą
ClassVerificationFailure
(b/187450483)
Wersja 1.0.0-beta01
21 kwietnia 2021 r.
Usługa androidx.datastore:datastore-*:1.0.0-beta01
została zwolniona. Wersja 1.0.0-beta01 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Usuń przeciążenia JVM w przypadku metod tylko przy użyciu kotlin (I2adc7)
Poprawki błędów
- Naprawiliśmy błąd, który powodował, że dostęp przedstawicieli bazy danych mógł powodować wyciek kontekstów (Ie96fc, b/184415662).
Wersja 1.0.0-alpha08
10 marca 2021 r.
Usługa androidx.datastore:datastore-*:1.0.0-alpha08
została zwolniona. Wersja 1.0.0-alfa08 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Możesz teraz dodać migrację uzależnioną od kontekstu u danego przedstawiciela usług
dataStore
ipreferencesDataStore
. (I4ef69, b/173726702) - Dodaje funkcje pomocnicze umożliwiające uzyskanie nazwy pliku, jeśli nie korzystasz już z przekazywania dostępu do magazynu danych ani kontekstu.createDataStore (I60f9a).
- Programy Serializer WriteTo i readFrom są teraz zawieszane. Jeśli masz zaimplementowany serializator, musisz zaktualizować funkcje, aby były funkcjami zawieszania. (I1e58e).
- Dodano przedstawicieli do usługi w przypadku użytkowników RxDataStore. (Ied768, b/173726702)
Poprawki błędów
- Egzekwuj ograniczenia dotyczące publicznego korzystania z eksperymentalnych interfejsów API (I6aa29, b/174531520)
Wersja 1.0.0-alpha07
24 lutego 2021 r.
Usługa androidx.datastore:datastore-*:1.0.0-alpha07
została zwolniona. Wersja 1.0.0-alfa07 zawiera te zatwierdzenia.
Zmiany interfejsu API
Funkcja rozszerzenia
Context.createDataStore
została usunięta i zastąpiona delegacją właściwości globalDataStore. Wywołaj raz globalDataStore na najwyższym poziomie pliku kotlin. Na przykład:val Context.myDataStore by dataStore(...)
Umieść to na najwyższym poziomie pliku kotlin, aby było jedno wystąpienie. (I57215, b/173726702)
Funkcje RxDataStore są teraz w klasie RxDataStore, a nie funkcji rozszerzeń w DataStore. (Idccdb, b/177691248)
Jeśli chcesz przenieść plik EncryptedSharedPreferences (lub bezpośrednio podczas rozruchu SharedPreferences) do DataStore, możesz to zrobić teraz za pomocą nowego konstruktora SharedPreferencesMigration, który pozwala wprowadzić parametr SharedPreferences. (I8e04e, b/177278510)
Poprawki błędów
- DataStore zgłasza teraz wyjątek, jeśli dla tego samego pliku istnieje wiele aktywnych magazynów DataStore. Jeśli nie zarządzasz magazynem DataStore jako pojedynczy magazyn lub nie pilnujesz, aby żadne 2 instancje DataStore nie były jednocześnie aktywne dla pliku, możesz teraz zobaczyć wyjątki podczas odczytu lub zapisu do DataStore. Możesz rozwiązać ten problem, zarządzając magazynem danych jako singleton. (Ib43f4, b/177691248)
- Napraw działanie anulowania po anulowaniu zakresu wywołującego. (I2c7b3)
Wersja 1.0.0-alpha06
13 stycznia 2021 r.
Usługa androidx.datastore:datastore-*:1.0.0-alpha06
została zwolniona. Wersja 1.0.0-alfa06 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano kody RxJava dla DataStore. Artefakty
datastore-rxjava2/3
zawierają kody podstawowych interfejsów API DataStore (RxDataStore
,RxDataStoreBuilder
iRxDataMigration
). Artefaktydatastore-preferences-rxjava2/3
zawierają kreator do tworzenia magazynu danych preferencji.
Zmiany interfejsu API
- Ukryj interfejs CorruptionHandler. Nie było powodu, aby była ona publiczna, ponieważ fabryka DataStore akceptuje tylko metodę ReplaceFileCorruptionHandler. (I0b3b3, b/176032264)
- Metoda
preferencesKey<T>(name: String): Key<T>
została usunięta i zastąpiona metodami odpowiednimi dla poszczególnych obsługiwanych typów, na przykładpreferencesKey<Int>("int")
to terazintPreferencesKey("int")
(Ibcfac, b/170311106)
Poprawki błędów
- Poprawiono dokumentację w DataStoreFactory, w której pominięto fakt, że plik magazynu danych jest tworzony w podkatalogu „datastore/”. (ICA222).
Wersja 1.0.0-alpha05
Grudzień 2, 2020
Usługa androidx.datastore:datastore-*:1.0.0-alpha05
została zwolniona. Wersja 1.0.0-alfa05 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 na zamknięcie (ale nie wymagamy) strumienia OutputStream przekazywanego do
Serializer.writeTo()
. (I5c9bf, b/173037611)
Wersja 1.0.0-alpha04
17 listopada 2020 r.
Usługa androidx.datastore:datastore-*:1.0.0-alpha04
została zwolniona. Wersja 1.0.0-alfa04 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem z pakietem, który powodował następującą awarię w preferencji Datastore
1.0.0-alpha03
:java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/preferences
- Pierwotnie awaria została zgłoszona tutaj: b/173036843
- (I4712d, b/173036843)
Wersja 1.0.0-alpha03
11 listopada 2020 roku
Usługa androidx.datastore:datastore-*:1.0.0-alpha03
została zwolniona. Wersja 1.0.0-alfa03 zawiera te zatwierdzenia.
Nowe funkcje
- Preferencje obsługują teraz wartości podwójne (co jest przydatne, jeśli potrzebujesz większej precyzji niż liczby zmiennoprzecinkowe) (I5be8f, b/169471808)
Zmiany interfejsu API
- Utworzono czystą zależność kotlin dla magazynu danych, aby umożliwić szybszą kompilację.
androidx.datastore:datastore-core
zawiera podstawowe interfejsy API tylko w języku kotlin, aandroidx.datastore:datastore
zawiera interfejsy API zależne od Androida (w tym konstruktorSharedPreferencesMigration
iContext.createDataStore
). (I42d75, b/168512698) - dzielenie celów na potrzeby magazynu danych preferencji w celu przyspieszenia kompilacji kodu kotlin (Ia3c19);
Serializatory wymagają teraz nowej właściwości dla domyślnej wartości, która będzie używana, gdy na dysku nie będzie żadnych danych. Ułatwia to implementację niestandardowych serializatorów, dzięki czemu użytkownicy nie muszą używać pustych strumieni wejściowych w specjalny sposób (puste strumienie wejściowe nie są analizowane w formacie json).
- Można też sprawdzić, czy strumień wyjściowy przekazany do writeTo() nie jest zamknięty, a jeśli jest zamknięty, powoduje zgłoszenie wyjątków (I16e29).
Zmieniono konstruktor obiektu SharedPreferencesView wewnętrznie. Pierwotnie była ona publicznie dostępna, aby umożliwić testowanie. Testy powinny zamiast tego utworzyć obiekt SharedPreferencesMigration i pod kątem tego testu. (I93891)
Poprawki błędów
- Parametr
produceFile
w elementachDataStoreFactory
iPreferenceDataStoreFactory
jest teraz ostatnim parametrem na liście, dzięki czemu umożliwia użycie składni lambda na końcu. (Ibe7f1, b/169425442) - Spełnienie nowych, wyraźnych wymagań dotyczących interfejsu API dla kotlin (I5ae1e)
Znane problemy
- Preferuj awarie Datastore z użyciem
java.lang.NoClassDefFoundError
. (b/173036843)
Wersja 1.0.0-alpha02
14 października 2020 r.
androidx.datastore:datastore-core:1.0.0-alpha02
i androidx.datastore:datastore-preferences:1.0.0-alpha02
zostały udostępnione. Wersja 1.0.0-alfa02 zawiera te zatwierdzenia.
Poprawki błędów
- Dodano zabezpieczenie przed mutacją w rdzeniu Datastore. Mutacja przerywa wykorzystanie magazynu danych przez osoby korzystające z bazy danych o typach innych niż proto lub inne (I6aa84)
- Do pliku Preferences.kt dodano metodę
toString
, która ułatwia debugowanie bieżącego stanu (I96006) - Dodano wyjątek chroniący 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-alpha01
Wrzesień 2, 2020
androidx.datastore:datastore-core:1.0.0-alpha01
i androidx.datastore:datastore-preferences:1.0.0-alpha01
zostały udostępnione. Wersja 1.0.0-alfa01 zawiera te zatwierdzenia.
Nowe funkcje
Jetpack DataStore to nowe, ulepszone rozwiązanie do przechowywania danych, które ma zastąpić SharedPreferences. Bazując na współrzędnych i mechanizmach Flow, DataStore udostępnia 2 różne implementacje:
- Proto DataStore, który umożliwia przechowywanie typów obiektów (wspieranych przez bufory protokołów).
- preferencji DataStore, która przechowuje pary klucz-wartość.
Dane są przechowywane asynchronicznie, w spójny i transakcyjny sposób. Pomijamy większość wad SharedPreferences.