Sobes.tech
Middle

Aké alternatívy k SharedPreferences môžete navrhnúť na ukladanie údajov v Android?

sobes.tech AI

Odpoveď od AI

  • Room Persistence Library: Abstrakcia nad SQLite. Poskytuje typovaný prístup k údajom cez DAO (Data Access Objects), podporu pre Coroutines a Flow. Vhodné pre štruktúrované a relačné údaje.

    // Príklad Query 
    @Dao
    interface UserDao {
        @Query("SELECT * FROM users WHERE id = :userId")
        suspend fun getUserById(userId: Int): User?
    }
    
  • DataStore: Modernejšia alternatíva k SharedPreferences od Google. Rieši problémy SharedPreferences s bezpečnosťou vlákien a blokovaním UI vlákna. Existujú dve implementácie: Preferences DataStore (podobne ako SharedPreferences) a Proto DataStore (pre typované údaje s Protocol Buffers). Používa Kotlin Coroutines a Flow.

    // Príklad čítania z Preferences DataStore
    val exampleCounterFlow: Flow<Int> = context.dataStore.data
        .map { preferences ->
            preferences[EXAMPLE_COUNTER] ?: 0
        }
    
  • Interné/vonkajšie úložisko (súbory): Pre ukladanie veľkých objemov nestruktúrovaných údajov, napríklad multimediálnych súborov alebo vlastných formátov. Vyžaduje explicitné riadenie prístupu a permissions.

    // Príklad zápisu do súboru vo vnútornom úložisku
    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: Nízkoúrový prístup k zabudovanej databáze SQLite. Vyžaduje písanie SQL dopytov a manuálne riadenie databázy (otvorenie, zatvorenie, správa verzií). Room je odporúčaná alternatíva pre väčšinu prípadov.

    -- Príklad SQL dopytu
    SELECT column1, column2 FROM table_name WHERE condition;
    
  • Externé cloudové služby: Firebase Realtime Database, Firestore. Na synchronizáciu údajov medzi zariadeniami, zálohy a spoločný prístup. Vyžaduje pripojenie na internet a riešenie konfliktov.

Výber alternatívy závisí od typu, objemu, štruktúry údajov, potreby synchronizácie a požiadaviek na výkon. Pre pár kľúčov a hodnôt s malým objemom je vhodnejší DataStore. Pre štruktúrované údaje — Room. Pre veľké nestruktúrované údaje — súborový systém.