0Pricing
Android Academy · Aula

Proto DataStore

Armazene dados estruturados e tipados.

Proto DataStore é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 4 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.

Proto DataStore

O Proto DataStore armazena objetos estruturados fortemente tipados, em vez de pares de chave e valor sem estrutura. Você define um esquema, e o DataStore armazena um objeto tipado por arquivo.

Ele é ideal quando suas configurações formam um modelo coerente.

Por que usar dados tipados

O Preferences DataStore não é tipado: um erro de digitação em uma chave ou a leitura do tipo errado só falha durante a execução. O Proto DataStore oferece segurança de tipos em tempo de compilação para todo o objeto de configurações.

  • Não há chaves de texto sujeitas a erros de digitação
  • Os valores padrão são definidos no esquema
  • Os campos facilitam a refatoração

Escolhendo um formato de serialização

A abordagem clássica usa Protocol Buffers (proto) para definir o esquema. Você também pode serializar com kotlinx.serialization ou qualquer formato personalizado. O esquema descreve os campos e os tipos.

Definindo um esquema Proto

Você escreve um arquivo .proto descrevendo a mensagem de configurações. O compilador de protobuf gera uma classe Kotlin/Java a partir dela.

syntax = "proto3";

option java_package = "com.example.app";
option java_multiple_files = true;

message UserSettings {
  bool dark_mode = 1;
  int32 font_size = 2;
  string username = 3;
}

Implementando um serializador

O DataStore precisa de um Serializer que saiba ler e gravar seu tipo em um fluxo, além de um defaultValue usado quando o arquivo está vazio.

object UserSettingsSerializer : Serializer<UserSettings> {
    override val defaultValue: UserSettings = UserSettings.getDefaultInstance()

    override suspend fun readFrom(input: InputStream): UserSettings =
        UserSettings.parseFrom(input)

    override suspend fun writeTo(t: UserSettings, output: OutputStream) =
        t.writeTo(output)
}

Criando o Proto DataStore

Use o delegado dataStore (não preferencesDataStore), passando o nome do arquivo e seu serializador.

val Context.settingsStore: DataStore<UserSettings> by dataStore(
    fileName = "user_settings.pb",
    serializer = UserSettingsSerializer
)

Lendo dados tipados

As leituras são feitas por meio de settingsStore.data, mas agora o tipo do fluxo é o seu modelo. Sem chaves nem conversões de tipo; basta acessar os campos diretamente.

val darkMode: Flow<Boolean> = context.settingsStore.data
    .map { settings -> settings.darkMode }

Gravando com updateData

O Proto DataStore substitui edit pela função suspensa updateData. Você recebe o objeto atual e retorna um novo. Com protobuf, você usa o construtor gerado.

suspend fun setDarkMode(enabled: Boolean) {
    context.settingsStore.updateData { current ->
        current.toBuilder()
            .setDarkMode(enabled)
            .build()
    }
}

Atualizações imutáveis

Observe que você nunca altera o objeto existente; você cria e retorna um novo. Essa imutabilidade é o que torna as atualizações transacionais e consistentes entre os observadores.

Tratando corrupção

Se o arquivo armazenado ficar ilegível, o DataStore lançará uma CorruptionException. Você pode fornecer um corruptionHandler que retorna um valor padrão seguro em vez de causar uma falha.

val Context.settingsStore by dataStore(
    fileName = "user_settings.pb",
    serializer = UserSettingsSerializer,
    corruptionHandler = ReplaceFileCorruptionHandler {
        UserSettings.getDefaultInstance()
    }
)

Preferences versus Proto

Escolha de acordo com suas necessidades:

  • Preferences: algumas sinalizações não relacionadas, configuração rápida, sem esquema
  • Proto: um modelo estruturado de configurações, segurança de tipos e valores padrão definidos

Ambos compartilham a mesma base assíncrona, transacional e orientada por Flow.

Verificação rápida

Teste sua compreensão sobre o Proto DataStore.

Recapitulação

Você aprendeu a armazenar dados tipados com o Proto DataStore:

  • Defina um esquema, geralmente com Protocol Buffers
  • Implemente um Serializer com um defaultValue
  • Crie o armazenamento por meio do delegado dataStore
  • Leia os campos diretamente; grave com updateData
  • Trate a corrupção com um manipulador que retorna um valor padrão

Você concluiu o curso de DataStore.

Perguntas Frequentes

A aula “Proto DataStore” é grátis?

Sim — o texto completo de “Proto DataStore” é 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 “Proto DataStore”?

Armazene dados estruturados e tipados. 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 4 de 4.

Quanto tempo leva a aula “Proto DataStore”?

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