Magazyn danych

Przechowuj dane asynchronicznie, w spójny i transakcyjny sposób, z wykorzystaniem niektórych wad SharedPreferences
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:

Preferences DataStore

Groovy

    // 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

Groovy

    // 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.

Tworzenie nowego numeru

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 testu DataStore w testach musisz uzyskać TestScope.backgroundScope.
  • 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ż żądania IOExceptions, 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 obiekt CorruptionException 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 i okio.Path), aby była zgodna z createMultiProcessCoordinator. (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 do androidx.datastore.core.
  • Dodaj w androidx.datastore.core.MultiProcessDataStoreFactory nową metodę fabryczną, aby tworzyć instancje DataStore z obiektami Storage na potrzeby operacji na plikach.
  • Dodaj nowy interfejs InterProcessCoordinator, który ułatwia komunikację wielu instancji DataStore między procesami. Pamiętaj, że wieloprocesowa implementacja InterProcessCoordinator jest dostępna tylko na urządzeniach z Androidem.

Zmiany interfejsu API

  • Dodanie InterProcessCoordinator do StorageConnection 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), dodaj MultiProcessDataStoreFactory#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. Fabryki DataStore 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 i preferencesDataStore. (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 i RxDataMigration). Artefakty datastore-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ład preferencesKey<Int>("int") to teraz intPreferencesKey("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

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, a androidx.datastore:datastore zawiera interfejsy API zależne od Androida (w tym konstruktor SharedPreferencesMigration i Context.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 elementach DataStoreFactory i PreferenceDataStoreFactory 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.