0Pricing
Android Academy · Pelajaran

DataStore vs SharedPreferences

Pelajari mengapa DataStore menjadi pilihan modern.

DataStore vs SharedPreferences adalah pelajaran Android Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Android Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Android Academy mencakup 4 pelajaran total.

Menyimpan Pengaturan Kecil

Hampir setiap aplikasi perlu mengingat sejumlah kecil data: tombol mode gelap, tab yang terakhir digunakan, atau nama pengguna. Data ini adalah preferensi key-value, bukan data relasional berukuran besar.

Selama bertahun-tahun Android menggunakan SharedPreferences untuk keperluan ini. Saat ini, solusi yang direkomendasikan adalah DataStore.

Apa Itu SharedPreferences

SharedPreferences adalah penyimpanan key-value sederhana yang didukung XML. Anda mendapatkan editor, memasukkan nilai, lalu menyimpannya.

  • Mudah digunakan
  • Terintegrasi dalam kerangka kerja
  • API sinkron yang dapat memblokir thread UI
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
prefs.edit().putBoolean("dark_mode", true).apply()
val dark = prefs.getBoolean("dark_mode", false)

Masalah pada SharedPreferences

SharedPreferences memiliki beberapa kelemahan nyata:

  • Pembacaan getX() dapat memblokir thread pemanggil (sering kali thread utama)
  • commit() melakukan I/O disk secara sinkron
  • Tidak ada cara bawaan untuk menandakan kesalahan
  • API-nya tidak aman terhadap tipe dan tidak reaktif

Gunakan DataStore

DataStore adalah pengganti modern yang dibangun di atas coroutine dan Flow Kotlin. DataStore melakukan semua pekerjaan disk di luar thread utama dan menyajikan data sebagai aliran yang dapat diamati.

Ada dua varian: Preferences DataStore (key-value) dan Proto DataStore (objek bertipe).

Asinkron Sejak Awal

DataStore tidak pernah memblokir UI. Pembacaan dilakukan melalui Flow yang Anda kumpulkan, sedangkan penulisan dilakukan melalui fungsi suspend yang Anda panggil dari coroutine.

Artinya, pembacaan dan penulisan pengaturan Anda tetap aman bahkan di thread utama, karena pekerjaan berat berlangsung di dispatcher latar belakang.

val darkMode: Flow<Boolean> = dataStore.data
    .map { prefs -> prefs[DARK_MODE_KEY] ?: false }

Pembaruan Reaktif

Karena DataStore menyediakan Flow, UI Anda otomatis diperbarui saat suatu nilai berubah. Dengan SharedPreferences, Anda harus mendaftarkan listener perubahan yang merepotkan.

Di Jetpack Compose, Anda cukup menggunakan collectAsState() pada flow, lalu layar akan dikomposisi ulang setiap kali ada pembaruan.

Transaksional dan Konsisten

Penulisan DataStore bersifat transaksional. Pembaruan akan berhasil sepenuhnya atau gagal sepenuhnya, sehingga Anda tidak akan pernah membaca nilai yang hanya tertulis sebagian.

DataStore juga menjamin konsistensi data di antara beberapa pembacaan dan penulisan dalam proses yang sama.

Penanganan Kesalahan

SharedPreferences diam-diam mengabaikan masalah I/O. DataStore menampilkannya: pembacaan dapat menghasilkan IOException melalui flow, yang kemudian dapat Anda tangkap dengan catch dan pulihkan.

val settings: Flow<Settings> = dataStore.data
    .catch { e ->
        if (e is IOException) emit(emptyPreferences())
        else throw e
    }
    .map { /* map to your model */ }

Saat DataStore Bukan Solusinya

DataStore ditujukan untuk data key-value atau data bertipe berukuran kecil hingga sedang. DataStore bukan basis data.

  • Dataset besar, kueri, relasi: gunakan Room
  • File, gambar, media: gunakan sistem file
  • Sejumlah kecil pengaturan: gunakan DataStore

Menambahkan Dependensi

Untuk menggunakan Preferences DataStore, tambahkan artefak tersebut ke file Gradle modul Anda. Tersedia artefak terpisah untuk Proto DataStore.

dependencies {
    implementation("androidx.datastore:datastore-preferences:1.1.1")
}

Memigrasikan dari SharedPreferences

Anda tidak perlu menulis ulang semuanya sekaligus. DataStore menyediakan SharedPreferencesMigration untuk menyalin nilai yang sudah ada secara otomatis saat pembacaan pertama.

val Context.dataStore by preferencesDataStore(
    name = "settings",
    produceMigrations = { context ->
        listOf(SharedPreferencesMigration(context, "settings"))
    }
)

Pemeriksaan Singkat

Uji pemahaman Anda tentang alasan DataStore lebih disarankan.

Rangkuman

Anda telah mempelajari alasan DataStore menjadi pilihan modern untuk pengaturan pasangan kunci-nilai:

  • SharedPreferences dapat memblokir thread utama dan tidak reaktif
  • DataStore menggunakan coroutine dan Flow untuk akses asinkron yang aman
  • Penulisan bersifat transaksional dengan penanganan kesalahan yang tepat
  • Tersedia dua varian: Preferences dan Proto

Selanjutnya, Anda akan menggunakan delegasi preferencesDataStore dalam praktik.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “DataStore vs SharedPreferences” gratis?

Ya — teks lengkap “DataStore vs SharedPreferences” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Android Academy, upgrade ke CoddyKit PRO. Kursus Android Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “DataStore vs SharedPreferences”?

Pelajari mengapa DataStore menjadi pilihan modern. Kamu berlatih Android Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Android Academy?

Tidak diperlukan pengalaman sebelumnya. Android Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “DataStore vs SharedPreferences” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Android Academy ini?

Ya. Setiap pelajaran Android Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. DataStore vs SharedPreferences
  2. Preferences DataStore
  3. Membaca dan Menulis Pengaturan
  4. Proto DataStore
← Kembali ke Android Academy