Sobes.tech
Middle

Que alternativas ao SharedPreferences pode sugerir para armazenar dados no Android?

sobes.tech IA

Resposta da IA

  • Biblioteca de Persistência de Quarto: Abstração sobre SQLite. Fornece acesso tipado aos dados através de DAO (Objetos de Acesso a Dados), suporte para Coroutines e Flow. Ideal para dados estruturados e relacionais.

    // Exemplo de consulta 
    @Dao
    interface UserDao {
        @Query("SELECT * FROM users WHERE id = :userId")
        suspend fun getUserById(userId: Int): User?
    }
    
  • DataStore: Alternativa mais moderna ao SharedPreferences do Google. Resolve problemas do SharedPreferences com segurança de threads e bloqueio do thread UI. Existem duas implementações: Preferences DataStore (semelhante ao SharedPreferences) e Proto DataStore (para dados tipados com Protocol Buffers). Usa Kotlin Coroutines e Flow.

    // Exemplo de leitura do Preferences DataStore
    val exampleCounterFlow: Flow<Int> = context.dataStore.data
        .map { preferences ->
            preferences[EXAMPLE_COUNTER] ?: 0
        }
    
  • Armazenamento interno/externo (arquivos): Para armazenar grandes volumes de dados não estruturados, como arquivos de mídia ou formatos personalizados. Requer gerenciamento explícito de acesso e permissões.

    // Exemplo de escrita em arquivo no armazenamento interno
    String filename = "myapplicationdata";
    String fileContents = "Hello world!";
    try (FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIVATE)) {
        fos.write(fileContents.getBytes());
    } catch (IOException e) {
        e.printStackTrace();
    }
    
  • SQLiteDatabase: Acesso de baixo nível ao banco de dados SQLite embutido. Requer escrever consultas SQL e gerenciar o banco de dados manualmente (abrir, fechar, gerenciar versões). Room é a alternativa recomendada na maioria dos casos.

    -- Exemplo de consulta SQL
    SELECT column1, column2 FROM table_name WHERE condition;
    
  • Serviços de nuvem externos: Firebase Realtime Database, Firestore. Para sincronização de dados entre dispositivos, backups e acesso compartilhado. Requer conexão à internet e gerenciamento de conflitos.

A escolha da alternativa depende do tipo, volume, estrutura dos dados, necessidade de sincronização e requisitos de desempenho. Para pares chave-valor com pouco volume, prefira DataStore. Para dados estruturados — Room. Para grandes dados não estruturados — sistema de arquivos.