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.