Sobes.tech
Middle

Jaké alternativy ke SharedPreferences můžete navrhnout pro ukládání dat v Androidu?

sobes.tech AI

Odpověď od AI

  • Knihovna trvalosti místnosti: Abstrakce nad SQLite. Poskytuje typovaný přístup k datům přes DAO (Data Access Objects), podporu pro Coroutines a Flow. Vhodné pro strukturovaná a relační data.

    // Příklad dotazu 
    @Dao
    interface UserDao {
        @Query("SELECT * FROM users WHERE id = :userId")
        suspend fun getUserById(userId: Int): User?
    }
    
  • DataStore: Modernější alternativa k SharedPreferences od Google. Řeší problémy SharedPreferences s bezpečností vláken a blokováním UI vlákna. Existují dvě implementace: Preferences DataStore (podobné SharedPreferences) a Proto DataStore (pro typovaná data s Protocol Buffers). Používá Kotlin Coroutines a Flow.

    // Příklad čtení z Preferences DataStore
    val exampleCounterFlow: Flow<Int> = context.dataStore.data
        .map { preferences ->
            preferences[EXAMPLE_COUNTER] ?: 0
        }
    
  • Vnitřní/vnější úložiště (soubory): Pro ukládání velkých objemů nestrukturovaných dat, například mediálních souborů nebo vlastních formátů. Vyžaduje explicitní správu přístupu a oprávnění.

    // Příklad zápisu do souboru ve vnitřním úložišti
    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ízké úrovně přístupu k vestavěné databázi SQLite. Vyžaduje psaní SQL dotazů a ruční správu databáze (otevření, zavření, správa verzí). Room je doporučená alternativa ve většině případů.

    -- Příklad SQL dotazu
    SELECT column1, column2 FROM table_name WHERE condition;
    
  • Externí cloudové služby: Firebase Realtime Database, Firestore. Pro synchronizaci dat mezi zařízeními, zálohy a sdílený přístup. Vyžaduje připojení k internetu a řešení konfliktů.

Volba alternativy závisí na typu, objemu, struktuře dat, potřebě synchronizace a požadavcích na výkon. Pro malé páry klíč-hodnota je vhodnější DataStore. Pro strukturovaná data — Room. Pro velká nestrukturovaná data — souborový systém.