SharedPreferences
Persista dados simples de chave e valor entre sessões do aplicativo usando SharedPreferences. Aprenda a salvar, ler e remover preferências.
SharedPreferences é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 4 de 6. 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 6 aulas no total.
Opções de armazenamento persistente
O Android oferece várias formas de armazenar dados localmente:
- SharedPreferences — pares simples de chave e valor (configurações, tokens)
- Room — banco de dados SQLite estruturado (dados complexos)
- DataStore — substituto assíncrono moderno para SharedPreferences
- Arquivos — entrada e saída de arquivos brutos
SharedPreferences é ideal para configurações simples e preferências do usuário.
O que é SharedPreferences?
SharedPreferences armazena dados como pares de chave e valor em um arquivo XML no dispositivo. Ele é compatível com:
- String
- Int / Long / Float
- Boolean
- Set<String>
Os dados persistem entre reinicializações do app e sobrevivem a alterações de configuração (rotação).
Obtendo uma instância de SharedPreferences
Há duas formas de obter um objeto SharedPreferences:
// 1. Named preferences (shared across activities)
val prefs = getSharedPreferences(
"MyAppPrefs", // file name
Context.MODE_PRIVATE // only your app can read it
)
// 2. Activity's default preferences
val prefs = getPreferences(Context.MODE_PRIVATE)Gravando dados
Use um Editor para gravar valores e depois chame apply():
val prefs = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)
prefs.edit()
.putString("username", "alice")
.putInt("login_count", 5)
.putBoolean("dark_mode", true)
.apply() // async, non-blocking — preferred over commit()
// Kotlin extension (cleaner syntax):
with(prefs.edit()) {
putString("username", "alice")
apply()
}Lendo dados
Leia os valores pela chave, fornecendo um valor padrão caso a chave não exista:
val prefs = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)
val username = prefs.getString("username", "Guest") // default: "Guest"
val count = prefs.getInt("login_count", 0) // default: 0
val darkMode = prefs.getBoolean("dark_mode", false) // default: false
println("Hello, $username! Logins: $count. Dark: $darkMode")Exemplo prático: alternância de tema
Salve e restaure uma configuração de modo escuro:
class SettingsActivity : AppCompatActivity() {
private lateinit var binding: ActivitySettingsBinding
private lateinit var prefs: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(binding.root)
prefs = getSharedPreferences("settings", MODE_PRIVATE)
// Restore saved state
binding.switchDarkMode.isChecked = prefs.getBoolean("dark_mode", false)
binding.switchDarkMode.setOnCheckedChangeListener { _, isChecked ->
prefs.edit().putBoolean("dark_mode", isChecked).apply()
}
}
}Salvando um token de login
Armazene e verifique um token de autenticação entre reinicializações do app:
// Save token after login
fun saveToken(token: String) {
getSharedPreferences("auth", MODE_PRIVATE)
.edit()
.putString("token", token)
.apply()
}
// Check if user is logged in
fun isLoggedIn(): Boolean {
val token = getSharedPreferences("auth", MODE_PRIVATE)
.getString("token", null)
return token != null
}
// Clear on logout
fun logout() {
getSharedPreferences("auth", MODE_PRIVATE)
.edit()
.remove("token")
.apply()
}Removendo e limpando dados
Remova chaves específicas ou apague todos os dados:
.remove("key")— exclui uma entrada.clear()— exclui tudo do arquivo
Sempre chame .apply() (ou .commit() se precisar de confirmação síncrona).
SharedPreferences vs DataStore
SharedPreferences funciona bem, mas tem limitações:
- Leituras síncronas podem bloquear a thread principal
- Não oferece segurança de tipos
Jetpack DataStore é o substituto moderno — totalmente assíncrono, com Kotlin Flow e segurança de tipos. Em projetos novos, prefira DataStore. SharedPreferences ainda é amplamente usado e perfeitamente adequado para pequenas quantidades de dados.
Verificação rápida
Qual método salva dados no SharedPreferences de forma assíncrona, sem bloquear a thread da interface?
Recapitulação: SharedPreferences
Agora você pode manter dados simples entre as inicializações do app:
- Obtenha com
getSharedPreferences(name, MODE_PRIVATE) - Grave:
.edit().putString(key, value).apply() - Leia:
.getString(key, defaultValue) - Remova:
.edit().remove(key).apply() - Prefira
apply()(assíncrono) acommit()(síncrono)
Próximo curso: arquitetura de apps — ViewModel, Room e Coroutines.
Perguntas Frequentes
A aula “SharedPreferences” é grátis?
Sim — o texto completo de “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 6 aulas no total.
O que vou aprender em “SharedPreferences”?
Persista dados simples de chave e valor entre sessões do aplicativo usando SharedPreferences. Aprenda a salvar, ler e remover preferências. 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 6.
Quanto tempo leva a aula “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
- Coleções do Kotlin
- Noções Básicas de RecyclerView
- Eventos de clique do RecyclerView
- SharedPreferences
- Preferências do DataStore
- Adaptadores e DiffUtil