Sobes.tech
Middle

Ce alternative la SharedPreferences puteți sugera pentru stocarea datelor în Android?

sobes.tech AI

Răspuns de la AI

  • Biblioteca de Persistență a Camerei: Abstracție peste SQLite. Oferă acces tipizat la date prin DAO (Obiecte de Acces la Date), suport pentru Coroutines și Flow. Ideal pentru date structurate și relaționale.

    // Exemplu de interogare 
    @Dao
    interface UserDao {
        @Query("SELECT * FROM users WHERE id = :userId")
        suspend fun getUserById(userId: Int): User?
    }
    
  • DataStore: Alternativa mai modernă la SharedPreferences de la Google. Rezolvă problemele SharedPreferences legate de siguranța thread-urilor și blocarea thread-ului UI. Există două implementări: Preferences DataStore (similar cu SharedPreferences) și Proto DataStore (pentru date tipizate cu Protocol Buffers). Folosește Kotlin Coroutines și Flow.

    // Exemplu de citire din Preferences DataStore
    val exampleCounterFlow: Flow<Int> = context.dataStore.data
        .map { preferences ->
            preferences[EXAMPLE_COUNTER] ?: 0
        }
    
  • Stocare internă/externă (fișiere): Pentru stocarea unor volume mari de date nestructurate, precum fișiere media sau formate personalizate. Necesită gestionare explicită a accesului și permisiuni.

    // Exemplu de scriere într-un fișier în stocarea internă
    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: Acces de nivel scăzut la baza de date SQLite încorporată. Necesită scrierea de interogări SQL și gestionarea manuală a bazei de date (deschidere, închidere, gestionarea versiunilor). Room este alternativa recomandată în majoritatea cazurilor.

    -- Exemplu de interogare SQL
    SELECT column1, column2 FROM table_name WHERE condition;
    
  • Servicii cloud externe: Firebase Realtime Database, Firestore. Pentru sincronizarea datelor între dispozitive, backup-uri și acces comun. Necesită conexiune la internet și gestionarea conflictelor.

Alegerea alternativei depinde de tipul, volumul, structura datelor, necesitatea sincronizării și cerințele de performanță. Pentru perechi cheie-valoare cu volum mic, preferați DataStore. Pentru date structurate — Room. Pentru date mari nestructurate — sistem de fișiere.