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:

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.

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.