Datastore
Aggiornamento più recente | Release stabile | Candidato per l'uscita | Versione beta | Release alpha |
---|---|---|---|---|
1° maggio 2024 | 1.1.1 | - | - | - |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza a Datastore, devi aggiungere il Repository Maven di Google al tuo progetto. Consulta il Repository Maven di Google per ulteriori informazioni.
Esistono due implementazioni di Datastore: Preferenze e protocollo. Scegli l'una o l'altra opzione. Puoi anche aggiungere dipendenze senza Android implementazione.
Aggiungi le dipendenze per l'implementazione necessaria nel file build.gradle
per la tua app o il tuo modulo:
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") }
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Non esitare a contattarci in caso di nuovi problemi o idee per migliorare questa raccolta. Dai un'occhiata alle problemi esistenti in questa raccolta, prima di crearne uno nuovo. Puoi aggiungere il tuo voto a un problema esistente tramite facendo clic sul pulsante a forma di stella.
Consulta la documentazione di Issue Tracker per ulteriori informazioni.
Versione 1.1
Versione 1.1.1
1° maggio 2024
Viene rilasciato androidx.datastore:datastore-*:1.1.1
. La versione 1.1.1 contiene questi commit.
Correzioni di bug
- Falso allarme mitigato di Linux su "Si verificherà un deadlock delle risorse" in un caso d'angolo più istanze
DataStore
tentano di scrivere da processi diversi annullando il blocco dei file.
Versione 1.1.0
17 aprile 2024
Viene rilasciato androidx.datastore:datastore-*:1.1.0
. La versione 1.1.0 contiene questi commit.
Modifiche principali dalla release 1.0.0
Per ulteriori informazioni, consulta le note di rilascio delle versioni alpha e beta della versione 1.1.0. Alcuni dei principali aggiornamenti della versione 1.1.0 sono:
- DataStore ora supporta più processi che accedono allo stesso file, con supporto per l'osservabilità tra i processi.
- La nuova interfaccia di Storage consente di personalizzare le modalità di archiviazione o serializzazione dei modelli dei dati.
- Ora puoi utilizzare DataStore nei progetti multipiattaforma Kotlin.
Versione 1.1.0-rc01
3 aprile 2024
Viene rilasciato androidx.datastore:datastore-*:1.1.0-rc01
. La versione 1.1.0-rc01 contiene questi commit.
Correzioni di bug
- È stato risolto il peggioramento delle prestazioni per cui le chiamate
updateData
non venivano ottimizzate nelle scritture su disco se i nuovi dati corrispondono a quelli precedenti (d64cfb5) - È stata corretta una condizione di gara per cui
MultiProcess
DataStore
potrebbe non includere invalidazioni durante l'inizializzazione. ((b/326141553),(094c2dd))
Versione 1.1.0-beta02
6 marzo 2024
Viene rilasciato androidx.datastore:datastore-*:1.1.0-beta02
. La versione 1.1.0-beta02 contiene questi commit.
Correzioni di bug
- Il miglioramento delle prestazioni in
DataStore
raccoglie le notifiche di aggiornamento solo quando vengono osservate. (b/267792241)- .
- Tieni presente che questa modifica potrebbe attivare
UncompletedCoroutinesError
nei tuoi test se utilizzi la libreria di test Coroutines. Assicurati di superareTestScope.backgroundScope
durante l'inizializzazione diDataStore
nei test per evitare questo problema.
- Tieni presente che questa modifica potrebbe attivare
- È stato risolto il problema del deadlock delle chiamate
updateData
nidificate nella stessa istanza. (b/241760537) DataStore
impostato non restituisce piùIOExceptions
se non riesce a eliminareSharedPreferences
durante la migrazione. (b/195553816)- È stato risolto il problema per cui la ridenominazione dei file non va a buon fine durante
updateData
in ambienti JVM non Android. (b/203087070) - È stato risolto il problema per cui
CorruptionException
non viene gestito dopo l'inizializzazione diDataStore
. (b/289582516)
Versione 1.1.0-beta01
10 gennaio 2024
androidx.datastore:datastore-*:1.1.0-beta01
viene rilasciato senza modifiche dal giorno 1.1.0-alpha07
. La versione 1.1.0-beta01 contiene questi commit.
Versione 1.1.0-alpha07
29 novembre 2023
Viene rilasciato androidx.datastore:datastore-*:1.1.0-alpha07
. La versione 1.1.0-alpha07 contiene questi commit.
Modifiche alle API
MultiProcessDataStoreFactory
metodi non sono più sperimentali.L'annotazione@ExperimentalMultiProcessDataStore
è stata rimossa completamente. (Ieee54, I8e607)
Correzioni di bug
- Implementa la rimozione delle annotazioni
@ExperimentalMultiProcessDataStore
nella versione 1.1.0-alpha07. (I8e607).
Versione 1.1.0-alpha06
1° novembre 2023
Viene rilasciato androidx.datastore:datastore-*:1.1.0-alpha06
. La versione 1.1.0-alpha06 contiene questi commit.
Modifiche alle API
- Il metodo di fabbrica
createSingleProcessCoordinator
ora riceve un percorso file (String
,java.io.File
eokio.Path
) per coerenza concreateMultiProcessCoordinator
. (I211c8, b/305755935)
Versione 1.1.0-alpha05
6 settembre 2023
Viene rilasciato androidx.datastore:datastore-*:1.1.0-alpha05
. La versione 1.1.0-alpha05 contiene questi commit.
Modifiche alle API
- Datastore
FileStorage
è ora disponibile pubblicamente, quindi i clienti possono fornire parametri personalizzati. (Icb985) - Il costruttore
OkioStorage
è stato modificato per accettare unInterProcessCoordinator
in modo da poterlo utilizzare su Android conMultiProcessCoordinator
. (Iecea3)
Correzioni di bug
- Correggi l'impossibilità di monitorare più file nella stessa directory in
MultiProcessCoordinator
. - Correzione dell'impossibilità di rilevare file duplicati se i percorsi dei file non sono normalizzati.
- Correggi i valori errati restituiti da
RxDataStore#isDisposed
. - Correggi la configurazione di ProGuard mancante per
datstore-preferences-core
artefatto.
Versione 1.1.0-alpha04
5 aprile 2023
Viene rilasciato androidx.datastore:datastore-*:1.1.0-alpha04
. La versione 1.1.0-alpha04 contiene questi commit.
Correzioni di bug
- Migliora l'implementazione interna per evitare una condizione di gara in cui il flusso di dati di
DataStore
potrebbe emettere un valore meno recente dopo un aggiornamento.
Versione 1.1.0-alpha03
24 marzo 2023
Viene rilasciato androidx.datastore:datastore-*:1.1.0-alpha03
.
Correzioni di bug
- Sono stati rimossi i vincoli di dipendenza dagli artefatti Maven per risolvere un problema di build nelle destinazioni native Kotlin (b/274786186, KT-57531).
Versione 1.1.0-alpha02
22 marzo 2023
Viene rilasciato androidx.datastore:datastore-*:1.1.0-alpha02
. La versione 1.1.0-alpha02 contiene questi commit.
Nota:
Tieni presente che questa versione include un importante refactoring interno che unisce le implementazioni per le implementazioni di datastore a processo singolo e multiprocesso. Tieni d'occhio le possibili modifiche indesiderate del comportamento (ad es. le tempistiche delle notifiche degli aggiornamenti). Puoi utilizzare il componente Issue Tracker per segnalare queste modifiche.
Nuove funzionalità
- Ora puoi utilizzare
DataStore
nei progetti KMM. Tieni presente che i target non Android di Datastore sono ancora sperimentali, ma abbiamo deciso di unire le versioni per consentire agli sviluppatori di provarle più facilmente. - Le funzionalità multi-processo vengono spostate da
androidx.datastore.multiprocess
aandroidx.datastore.core
. - Aggiungi un nuovo metodo di ripristino in
androidx.datastore.core.MultiProcessDataStoreFactory
per creare istanze Datastore con oggettiStorage
per le operazioni con i file. - Aggiungi una nuova interfaccia
InterProcessCoordinator
che consente a più istanze Datastore di comunicare tra i processi. Tieni presente che l'implementazione multi-processo diInterProcessCoordinator
è disponibile solo su Android.
Modifiche alle API
- Aggiungi
InterProcessCoordinator
aStorageConnection
nell'interfaccia datastore-core (I555bb) - Cambia le API in
MultiProcessDataStoreFactory
datastore-core per utilizzare Storage. (Iac02f) - Spostamento delle API pubbliche da datastore-multiprocess a datastore-core (I76d7c)
PreferencesSerializer
esposto da datastore-preferences-core (I4b788)- Aggiunta dell'annotazione
@JvmDefaultWithCompatibility
(I8f206)
Versione 1.1.0-alpha01
9 novembre 2022
Viene rilasciato androidx.datastore:datastore-*:1.1.0-alpha01
. La versione 1.1.0-alpha01 contiene questi commit.
Nuove funzionalità
- Supporta casi d'uso multi-processo in cui la coerenza dei dati è garantita tra
DataStore
istanze nei vari processi. AggiungiMultiProcessDataStoreFactory#create
per creare queste istanzeDataStore
. - Nuova interfaccia di archiviazione che consente la disattivazione del meccanismo di archiviazione sottostante per
Datastore
. Vengono fornite implementazioni per java.io e okio.DataStore
fabbriche hanno nuovi metodi che accettano questo oggetto Storage.
Modifiche alle API
- Cambia le API in
MultiProcessDataStoreFactory
datastore-core per utilizzare Storage. (Iac02f) - Spostamento delle API pubbliche da datastore-multiprocess a datastore-core (I76d7c)
PreferencesSerializer
esposto da datastore-preferences-core (I4b788)
Versione 1.0.0
Versione 1.0.0
4 agosto 2021
Viene rilasciato androidx.datastore:datastore-*:1.0.0
. La versione 1.0.0 contiene questi commit.
Funzionalità principali di 1.0.0
Jetpack DataStore è una soluzione di archiviazione dati che consente di archiviare coppie chiave-valore o oggetti digitati con buffer di protocollo. DataStore utilizza le coroutine Kotlin e Flow per archiviare i dati in modo asincrono, coerente e transazionale.
Versione 1.0.0-rc02
21 luglio 2021
Viene rilasciato androidx.datastore:datastore-*:1.0.0-rc02
. La versione 1.0.0-rc02 contiene questi commit.
Correzioni di bug
- Chiarisci che
SharedPreferencesMigration
non viene eseguito se non esistono chiavi. (Icfa32, b/192824325) - È stato corretto il bug per cui
SharedPreferencesMigration
creato conMIGRATE_ALL_KEYS
generava un'eccezione se la chiave richiesta non esiste ancora. (Ie318a, b/192824325)
Versione 1.0.0-rc01
30 giugno 2021
Viene rilasciato androidx.datastore:datastore-*:1.0.0-rc01
. La versione 1.0.0-rc01 contiene questi commit.
Correzioni di bug
- Corregge il bug per cui il file .java veniva aggiunto inavvertitamente nel jar finale (I65d96, b/188985637)
Versione 1.0.0-beta02
16 giugno 2021
Viene rilasciato androidx.datastore:datastore-*:1.0.0-beta02
. La versione 1.0.0-beta02 contiene questi commit.
Correzioni di bug
- Correggi
ClassVerificationFailure
(b/187450483)
Versione 1.0.0-beta01
21 aprile 2021
Viene rilasciato androidx.datastore:datastore-*:1.0.0-beta01
. La versione 1.0.0-beta01 contiene questi commit.
Modifiche alle API
- Rimuovi i sovraccarichi della JVM per i metodi solo Kotlin (I2adc7)
Correzioni di bug
- È stato corretto un bug per cui i delegati del datastore potevano causare fughe di contesti (Ie96fc, b/184415662)
Versione 1.0.0-alpha08
10 marzo 2021
Viene rilasciato androidx.datastore:datastore-*:1.0.0-alpha08
. La versione 1.0.0-alpha08 contiene questi commit.
Modifiche alle API
- Ora puoi aggiungere al delegato della proprietà
dataStore
epreferencesDataStore
una migrazione che dipende dal contesto. (I4ef69, b/173726702) - Aggiunge funzioni helper per ottenere il nome del file se non utilizzi più datastore delegato o context.createDataStore (I60f9a)
- Le funzionalità writeTo e readFrom del serializzatore sono ora sospese. Se hai implementato un serializzatore, dovrai aggiornare le tue funzioni in modo che diventino funzioni di sospensione. (I1e58e).
- Delegati di proprietà aggiunti per gli utenti RxDataStore. (Ied768, b/173726702)
Correzioni di bug
- Applicare restrizioni sull'uso pubblico delle API sperimentali (I6aa29, b/174531520)
Versione 1.0.0-alpha07
24 febbraio 2021
Viene rilasciato androidx.datastore:datastore-*:1.0.0-alpha07
. La versione 1.0.0-alpha07 contiene questi commit.
Modifiche alle API
La funzione di estensione
Context.createDataStore
è stata rimossa e sostituita con il delegato della proprietà globalDataStore. Chiama globalDataStore una volta al livello più alto nel tuo file Kotlin. Ad esempio:val Context.myDataStore by dataStore(...)
Colloca questo comando all'inizio del file Kotlin in modo che ci sia una sola istanza. (I57215, b/173726702)
Le funzioni RxDataStore sono ora in una classe RxDataStore anziché funzioni di estensione su Datastore. (Idccdb, b/177691248)
Se vuoi eseguire la migrazione di EncryptedSharedPreferences (o di avvio diretto SharedPreferences) a DataStore, ora puoi farlo con il nuovo costruttore SharedPreferencesMigrazione, che ti consente di inserire SharedPreferences. (I8e04e, b/177278510)
Correzioni di bug
- Datastore genera un'eccezione se esistono più datastore attivi per lo stesso file. Se non gestisci il datastore come singleton o non hai garantito che non ci siano due istanze di datastore attive contemporaneamente per un file, ora potresti vedere delle eccezioni durante la lettura o la scrittura nel datastore. Questi possono essere risolti gestendo il datastore come singleton. (Ib43f4, b/177691248)
- Correggi il comportamento di annullamento quando l'ambito del chiamante viene annullato. (I2c7b3).
Versione 1.0.0-alpha06
13 gennaio 2021
Viene rilasciato androidx.datastore:datastore-*:1.0.0-alpha06
. La versione 1.0.0-alpha06 contiene questi commit.
Nuove funzionalità
- Sono stati aggiunti wrapper RxJava per Datastore. Gli artefatti
datastore-rxjava2/3
contengono i wrapper per le API DataStore principali (RxDataStore
,RxDataStoreBuilder
eRxDataMigration
). Gli artefattidatastore-preferences-rxjava2/3
contengono un builder per creare un datastore preferenze.
Modifiche alle API
- Nascondi l'interfaccia di CorruptionGestori. Non c'era motivo per renderlo pubblico perché la fabbrica DataStore accetta solo un ReplaceFileCorruptionGestori. (I0b3b3, b/176032264)
- Il metodo
preferencesKey<T>(name: String): Key<T>
è stato rimosso e sostituito con metodi specifici per ciascun tipo supportato, ad esempiopreferencesKey<Int>("int")
è oraintPreferencesKey("int")
(Ibcfac, b/170311106)
Correzioni di bug
- Corregge la documentazione su DataStore Fabbrica che tralasciava il fatto che il file del datastore venisse creato nella sottodirectory "datastore/". (Ica222).
Versione 1.0.0-alpha05
2 dicembre 2020
Viene rilasciato androidx.datastore:datastore-*:1.0.0-alpha05
. La versione 1.0.0-alpha05 contiene questi commit.
Correzioni di bug
- Aggiungi una documentazione migliore ed eccezioni per le scritture simultanee dai datastore. (Ia98a2, b/173522155, b/173726702)
- Ora consentiamo (ma non è obbligatorio) la chiusura dell'OutputStream passato a
Serializer.writeTo()
. (I5c9bf, b/173037611)
Versione 1.0.0-alpha04
17 novembre 2020
Viene rilasciato androidx.datastore:datastore-*:1.0.0-alpha04
. La versione 1.0.0-alpha04 contiene questi commit.
Correzioni di bug
- È stato risolto un problema di pacchetti che causa il seguente arresto anomalo in Datastore delle preferenze
1.0.0-alpha03
:java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/preferences
- .
- L'arresto anomalo è stato originariamente segnalato qui: b/173036843
- (I4712d, b/173036843)
Versione 1.0.0-alpha03
11 novembre 2020
Viene rilasciato androidx.datastore:datastore-*:1.0.0-alpha03
. La versione 1.0.0-alpha03 contiene questi commit.
Nuove funzionalità
- Le preferenze ora supportano valori doppi (utile se hai bisogno di una maggiore precisione rispetto ai valori mobili) (I5be8f, b/169471808)
Modifiche alle API
- È stata creata una dipendenza kotlin pura per il datastore per consentire una compilazione più rapida.
androidx.datastore:datastore-core
contiene solo le API principali di Kotlin eandroidx.datastore:datastore
contiene le API che dipendono da Android (tra cui il costruttoreSharedPreferencesMigration
eContext.createDataStore
)(I42d75, b/168512698) - Suddivisione dei target per il datastore delle preferenze per una compilazione più rapida di Kotlin (Ia3c19)
I serializzatori ora richiedono una nuova proprietà per il valore predefinito che verrà utilizzato se non ci sono dati sul disco. In questo modo è più semplice implementare i serializzatori personalizzati, in modo che gli utenti non debbano utilizzare flussi di input vuoti in caso speciale (i flussi di input vuoti non vengono analizzati con json).
- Inoltre, ora è disponibile un controllo per confermare che il flusso di output fornito a writeTo() non sia chiuso e, se viene chiuso, genera delle eccezioni (I16e29).
Impostazione del costruttore per SharedPreferencesView in modo interno. In origine era pubblica per consentire i test. I test dovrebbero invece creare una SharedPreferencesMigration e testarla. (I93891)
Correzioni di bug
- Il parametro
produceFile
inDataStoreFactory
ePreferenceDataStoreFactory
è ora l'ultimo parametro nell'elenco, quindi ti consente di utilizzare la sintassi lambda finale di kotlin. (Ibe7f1, b/169425442) - Seguendo i nuovi requisiti espliciti dell'API per kotlin (I5ae1e)
Problemi noti
- Datastore Preferenze si arresta in modo anomalo con
java.lang.NoClassDefFoundError
. (b/173036843)
Versione 1.0.0-alpha02
14 ottobre 2020
Vengono rilasciate le versioni androidx.datastore:datastore-core:1.0.0-alpha02
e androidx.datastore:datastore-preferences:1.0.0-alpha02
. La versione 1.0.0-alpha02 contiene questi commit.
Correzioni di bug
- Aggiunta una protezione dalle mutazioni in datastore-core. La mutazione interrompe l'utilizzo del datastore per le persone che utilizzano datastore con tipi non proto/non preferenze (I6aa84)
- È stato aggiunto un metodo
toString
aPreferences.kt per semplificare il debug dello stato corrente (I96006) - È stata aggiunta un'eccezione per la salvaguardia dall'uso improprio di
DataStore.Preferences
(I1134d) - È stato corretto un bug che causava l'arresto anomalo dell'app all'avvio (I69237, b/168580258)
Versione 1.0.0-alpha01
2 settembre 2020
Vengono rilasciate le versioni androidx.datastore:datastore-core:1.0.0-alpha01
e androidx.datastore:datastore-preferences:1.0.0-alpha01
. La versione 1.0.0-alpha01 contiene questi commit.
Nuove funzionalità
Jetpack DataStore è una soluzione di archiviazione dati nuova e migliorata che mira a sostituire SharedPreferences. Basato sulle coroutine Kotlin e Flow, DataStore offre due diverse implementazioni:
- Proto DataStore, che consente di archiviare oggetti digitati (supportati dai buffer di protocollo)
- Datastore delle preferenze, in cui vengono archiviate coppie chiave-valore
I dati vengono archiviati in modo asincrono, coerente e transazionale, superando la maggior parte degli svantaggi di SharedPreferences.