Sobes.tech
Middle

Kokias alternatyvas SharedPreferences galite pasiūlyti duomenų saugojimui Android?

sobes.tech AI

Atsakymas iš AI

  • Room Persistence Library: Abstrakcija nad SQLite. Pateikia tipizuotą prieigą prie duomenų per DAO (Data Access Objects), palaiko Coroutines ir Flow. Puikiai tinka struktūruotiems ir reliacinės duomenims:

    // Pavyzdys Query 
    @Dao
    interface UserDao {
        @Query("SELECT * FROM users WHERE id = :userId")
        suspend fun getUserById(userId: Int): User?
    }
    
  • DataStore: Modernesnė alternatyva SharedPreferences iš Google. Sprendžia SharedPreferences problemas, tokias kaip srauto saugumas ir UI srauto blokavimas. Yra dvi įgyvendinimo formos: Preferences DataStore (panašus į SharedPreferences) ir Proto DataStore (tipizuotiems duomenims su Protocol Buffers). Naudoja Kotlin Coroutines ir Flow.

    // Pavyzdys skaitymo iš Preferences DataStore
    val exampleCounterFlow: Flow<Int> = context.dataStore.data
        .map { preferences ->
            preferences[EXAMPLE_COUNTER] ?: 0
        }
    
  • Vidinis/išorinis saugojimas (failai): Naudojamas dideliems nestruktūruotiems duomenims saugoti, pvz., medijos failams ar pritaikytiems formatams. Reikalauja aiškaus prieigos ir leidimų valdymo.

    // Pavyzdys įrašymo į failą vidiniame saugykloje
    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: Žemo lygio prieiga prie įmontuotos SQLite duomenų bazės. Reikalauja rašyti SQL užklausas ir rankiniu būdu valdyti bazę (atidaryti, uždaryti, versijų valdymas). Room yra rekomenduojama alternatyva daugeliu atvejų.

    -- Pavyzdys SQL užklausos
    SELECT column1, column2 FROM table_name WHERE condition;
    
  • Išorinės debesų paslaugos: Firebase Realtime Database, Firestore. Duomenų sinchronizacija tarp įrenginių, atsarginės kopijos ir bendras naudojimas. Reikalauja interneto ryšio ir konfliktų sprendimo.

Pasirinkimas priklauso nuo duomenų tipo, apimties, struktūros, sinchronizacijos poreikio ir našumo reikalavimų. Mažiems raktų-verčių poroms geriau naudoti DataStore. Struktūruotiems duomenims — Room. Dideliems nestruktūruotiems duomenims — failų sistemą.