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
Serializercom umdefaultValue - 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
- DataStore versus SharedPreferences
- DataStore de preferências
- Lendo e gravando configurações
- Proto DataStore