0Pricing
Android Academy · Aula

DataStore versus SharedPreferences

Entenda por que DataStore é a escolha moderna.

DataStore versus SharedPreferences é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Android Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Android Academy inclui 4 aulas no total.

Armazenando configurações pequenas

Quase todo aplicativo precisa lembrar pequenos dados: uma opção de modo escuro, a última aba usada ou um nome de usuário. Essas são preferências de chave e valor, não dados relacionais volumosos.

Durante anos, o Android usou SharedPreferences para isso. Hoje, a solução recomendada é o DataStore.

O que é SharedPreferences

SharedPreferences é um armazenamento simples de chave e valor baseado em XML. Você obtém um editor, insere valores e confirma as alterações.

  • Fácil de usar
  • Integrado ao framework
  • API síncrona que pode bloquear a thread da interface
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
prefs.edit().putBoolean("dark_mode", true).apply()
val dark = prefs.getBoolean("dark_mode", false)

Os problemas do SharedPreferences

SharedPreferences tem limitações reais:

  • As leituras de getX() podem bloquear a thread que faz a chamada (geralmente a thread principal)
  • commit() realiza E/S de disco de forma síncrona
  • Não há uma forma integrada de sinalizar erros
  • A API não é segura quanto aos tipos nem reativa

Entra o DataStore

DataStore é o substituto moderno, baseado nas corrotinas e no Flow do Kotlin. Ele realiza todo o trabalho de disco fora da thread principal e expõe os dados como um fluxo observável.

Há duas variantes: Preferences DataStore (chave e valor) e Proto DataStore (objetos tipados).

Assíncrono por definição

DataStore nunca bloqueia a interface. As leituras chegam por meio de um Flow que você coleta, e as gravações são funções suspend chamadas a partir de uma corrotina.

Isso significa que as leituras e gravações das configurações são seguras até mesmo na thread principal, pois o trabalho pesado acontece em um despachante em segundo plano.

val darkMode: Flow<Boolean> = dataStore.data
    .map { prefs -> prefs[DARK_MODE_KEY] ?: false }

Atualizações reativas

Como DataStore expõe um Flow, sua interface é atualizada automaticamente quando um valor muda. Com SharedPreferences, era necessário registrar um listener de alterações pouco prático.

No Jetpack Compose, basta aplicar collectAsState() ao fluxo, e a tela é recomposta a cada atualização.

Transacional e consistente

As gravações do DataStore são transacionais. Uma atualização é concluída totalmente ou falha totalmente, portanto você nunca lê um valor gravado pela metade.

Ele também garante a consistência dos dados entre várias leituras e gravações dentro do mesmo processo.

Tratamento de erros

SharedPreferences ignora silenciosamente problemas de E/S. DataStore os expõe: uma leitura pode emitir uma IOException pelo fluxo, da qual você pode se recuperar usando catch.

val settings: Flow<Settings> = dataStore.data
    .catch { e ->
        if (e is IOException) emit(emptyPreferences())
        else throw e
    }
    .map { /* map to your model */ }

Quando DataStore não é a resposta

DataStore é indicado para dados pequenos ou médios de chave e valor ou dados tipados. Ele não é um banco de dados.

  • Grandes conjuntos de dados, consultas e relações: use Room
  • Arquivos, imagens e mídia: use o sistema de arquivos
  • Algumas configurações: use DataStore

Adicionando a dependência

Para usar o Preferences DataStore, adicione o artefato ao arquivo Gradle do seu módulo. Há um artefato separado para o Proto DataStore.

dependencies {
    implementation("androidx.datastore:datastore-preferences:1.1.1")
}

Migrando do SharedPreferences

Não é necessário reescrever tudo de uma vez. O DataStore oferece SharedPreferencesMigration para copiar automaticamente os valores existentes na primeira leitura.

val Context.dataStore by preferencesDataStore(
    name = "settings",
    produceMigrations = { context ->
        listOf(SharedPreferencesMigration(context, "settings"))
    }
)

Verificação rápida

Teste sua compreensão sobre o motivo de o DataStore ser preferível.

Recapitulação

Você aprendeu por que o DataStore é a opção moderna para configurações de chave e valor:

  • O SharedPreferences pode bloquear a thread principal e não é reativo
  • O DataStore usa corrotinas e Flow para acesso assíncrono seguro
  • As gravações são transacionais e contam com tratamento adequado de erros
  • Há duas variantes: Preferences e Proto

Em seguida, você usará o delegado preferencesDataStore na prática.

Perguntas Frequentes

A aula “DataStore versus SharedPreferences” é grátis?

Sim — o texto completo de “DataStore versus SharedPreferences” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Android Academy, atualize para CoddyKit PRO. O curso de Android Academy inclui 4 aulas no total.

O que vou aprender em “DataStore versus SharedPreferences”?

Entenda por que DataStore é a escolha moderna. Você pratica Android Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Android Academy?

Nenhuma experiência prévia é necessária. Android Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “DataStore versus SharedPreferences”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Android Academy?

Sim. Cada aula de Android Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. DataStore versus SharedPreferences
  2. DataStore de preferências
  3. Lendo e gravando configurações
  4. Proto DataStore
← Voltar para Android Academy