Sobes.tech
Middle

Koje alternative SharedPreferences možete predložiti za skladištenje podataka na Androidu?

sobes.tech АИ

Одговор од АИ

  • Room Persistence Library: Apstrakcija nad SQLite-om. Pruža tipizirani pristup podacima putem DAO (Data Access Objects), podršku za Coroutines i Flow. Odlično za strukturirane i relacijske podatke.

    // Primer upita 
    @Dao
    interface UserDao {
        @Query("SELECT * FROM users WHERE id = :userId")
        suspend fun getUserById(userId: Int): User?
    }
    
  • DataStore: Modernija alternativa SharedPreferences od Google-a. Rešava probleme SharedPreferences sa thread-safety i blokiranjem UI niti. Postoje dve implementacije: Preferences DataStore (slično SharedPreferences) i Proto DataStore (za tipizirane podatke sa Protocol Buffers). Koristi Kotlin Coroutines i Flow.

    // Primer čitanja iz Preferences DataStore
    val exampleCounterFlow: Flow<Int> = context.dataStore.data
        .map { preferences ->
            preferences[EXAMPLE_COUNTER] ?: 0
        }
    
  • Interna/eksterna memorija (fajlovi): Za skladištenje velikih količina nestrukturiranih podataka, na primer medija fajlova ili prilagođenih formata. Zahteva eksplicitno upravljanje pristupom i permissions.

    // Primer zapisivanja u fajl u unutrašnjem skladištu
    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: Niskonivojski pristup ugrađenoj bazi podataka SQLite. Zahteva pisanje SQL upita i ručno upravljanje bazom (otvaranje, zatvaranje, verzije). Room je preporučena alternativa za većinu slučajeva.

    -- Primer SQL upita
    SELECT column1, column2 FROM table_name WHERE condition;
    
  • Spoljni cloud servisi: Firebase Realtime Database, Firestore. Za sinhronizaciju podataka između uređaja, bekapove i zajednički pristup. Zahteva internet konekciju i rešavanje konflikata.

Izbor alternative zavisi od tipa, obima, strukture podataka, potrebe za sinhronizacijom i zahteva za performansama. Za par ključeva i vrednosti sa malim obimom je poželjniji DataStore. Za strukturirane podatke — Room. Za velike nestrukturirane podatke — fajl sistem.