Junior
Já trabalhou com DataStore Preferences no Android?
sobes.tech IA
Resposta da IA
Sim, trabalhei.
Preferences do DataStore são um análogo assíncrono do SharedPreferences, incluído no AndroidX DataStore. Permitem armazenar de forma segura pares de chave-valor simples, usando KSP sobre Kotlin Flow ou RxJava3 para trabalho assíncrono e Protobuf/Proto DataStore ou Proto DataStore para tipos de dados.
As principais vantagens do DataStore Preferences em comparação com o SharedPreferences:
- Assincronia: Funciona usando Flow ou RxJava3, prevenindo bloqueios na thread principal e evitando problemas de ANR.
- Segurança: Operações atômicas de leitura/escrita garantem a consistência dos dados.
- Segurança de tipos: Com Protobuf DataStore, pode-se definir um esquema de dados, evitando erros ao trabalhar com tipos.
- Reatividade: Permite observar mudanças nos dados em tempo real.
Exemplo de uso do DataStore Preferences com Kotlin Flow:
// Criação do DataStore
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
// Leitura de dados
suspend fun readString(context: Context, key: String): String? {
val preferencesKey = stringPreferencesKey(key)
val preferences = context.dataStore.data.first()
return preferences[preferencesKey]
}
// Escrita de dados
suspend fun writeString(context: Context, key: String, value: String) {
val preferencesKey = stringPreferencesKey(key)
context.dataStore.edit { settings ->
settings[preferencesKey] = value
}
}
Exemplo de uso do KSP para criar acesso seguro de tipos:
// No build.gradle (:app) adicione o plugin
plugins {
...
id("com.google.devtools.ksp") version "1.7.21-1.0.8" // Versão de exemplo, verifique a atual
}
// No build.gradle (:app) adicione dependências
dependencies {
...
implementation("androidx.datastore:datastore-preferences:1.0.0") // Verifique a versão atual
implementation("androidx.datastore:datastore-preferences-core:1.0.0") // Verifique a versão atual
ksp("androidx.datastore:datastore-preferences-core:1.0.0") // Verifique a versão atual
}
// Definição de interface para KSP
interface SettingsPref {
val appName: String
val isNotificationsEnabled: Boolean
val theme: Int
}
// Geração de implementação com KSP
// Criará uma classe do tipo SettingsPrefImpl, que pode ser usada para acessar os dados
DataStore Preferences é a forma recomendada de armazenar configurações simples e dados no Android, substituindo o obsoleto SharedPreferences.