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
SharedPreferencesod Google-a. Rešava problemeSharedPreferencessa thread-safety i blokiranjem UI niti. Postoje dve implementacije:Preferences DataStore(sličnoSharedPreferences) iProto 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).
Roomje 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.