Magazyn danych

Przechowuj dane asynchronicznie, w spójny i transakcyjny sposób, przezwyciężając niektóre wady elementu SharedPreferences.
Najnowsza aktualizacja Wersja stabilna Kandydat do publikacji Wersja Beta Wersja alfa
17 kwietnia 2024 r. 1.1.0 - - -

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.0"

        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-preferences-rxjava2:1.1.0"

        // optional - RxJava3 support
        implementation "androidx.datastore:datastore-preferences-rxjava3:1.1.0"
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation "androidx.datastore:datastore-preferences-core:1.1.0"
    }
    

Kotlin

    // Preferences DataStore (SharedPreferences like APIs)
    dependencies {
        implementation("androidx.datastore:datastore-preferences:1.1.0")

        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-preferences-rxjava2:1.1.0")

        // optional - RxJava3 support
        implementation("androidx.datastore:datastore-preferences-rxjava3:1.1.0")
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation("androidx.datastore:datastore-preferences-core:1.1.0")
    }
    

Proto DataStore

Odlotowy

    // Typed DataStore (Typed API surface, such as Proto)
    dependencies {
        implementation "androidx.datastore:datastore:1.1.0"

        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-rxjava2:1.1.0"

        // optional - RxJava3 support
        implementation "androidx.datastore:datastore-rxjava3:1.1.0"
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation "androidx.datastore:datastore-core:1.1.0"
    }
    

Kotlin

    // Typed DataStore (Typed API surface, such as Proto)
    dependencies {
        implementation("androidx.datastore:datastore:1.1.0")

        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-rxjava2:1.1.0")

        // optional - RxJava3 support
        implementation("androidx.datastore:datastore-rxjava3:1.1.0")
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation("androidx.datastore:datastore-core:1.1.0")
    }
    

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.

Utwórz nowy numer

Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.

Wersja 1.1

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 testu DataStore musisz ukończyć test TestScope.backgroundScope.
  • 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ługa CorruptionException 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 i okio.Path), aby zachować spójność ze standardem createMultiProcessCoordinator. (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ł konstruktor InterProcessCoordinator, 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 do androidx.datastore.core.
  • W androidx.datastore.core.MultiProcessDataStoreFactory dodaj nową metodę fabryczną, aby utworzyć instancje DataStore z obiektami Storage na potrzeby operacji na plikach.
  • Dodano nowy interfejs InterProcessCoordinator, który ułatwia komunikację między wieloma instancjami DataStore. Pamiętaj, że wieloprocesowa implementacja InterProcessCoordinator jest dostępna tylko na Androidzie.

Zmiany w interfejsie API

  • Dodaj InterProcessCoordinator do tabeli StorageConnection 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. Dodaj MultiProcessDataStoreFactory#create, aby utworzyć takie instancje DataStore.
  • 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

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 i preferencesDataStore 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. Na 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 i RxDataMigration). Artefakty datastore-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ład preferencesKey<Int>("int") to teraz intPreferencesKey("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

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