Android-native

Berkenalan dengan Jetpack DataStore

DataStore adalah bagian dari Jetpack yang berfungsi untuk menyimpan data secara aman, dan konsisten untuk data dengan ukuran kecil. Lib ini dibuat...

Ikhwan Written by Ikhwan · 1 min read >

DataStore adalah bagian dari Jetpack yang berfungsi untuk menyimpan data secara aman, dan konsisten untuk data dengan ukuran kecil. Lib ini dibuat berdasarkan Kotlin coroutines dan Flow yang memungkinkan penyimpanan data dilakukan secara asynchronous. Ini ditujukan untuk mengganti SharedPreferences, karena thread-safe dan non-blocking.

DataStore memiliki dua impelementasi, yaitu Proto DataStore, yang menyimpan data bertipe object (by protocol buffers) dan Preferences DataStore, yang menyimpan data secara key-value pairs.

DataStore vs SharedPreferences

Perbandingan

1. Async API

SharedPreferences bisa digunakan secara async, seperti penggunaan OnSharedPreferenceChangeListener. Namun callback ini tetap dipanggil dari main thread. Begitu juga dengan penggunaan apply( ) , tapi tetap ingat, hal ini akan ngeblock UI thread, berpotensi untuk mengakibatkan UI jank dan ANRs.

Sedangkan DataStore menawarkan fully asynchronouse API untuk mengambil dan menyimpan data, dengan menggunakan kemampuan dari Kotlin coroutines dan Flow. Hal ini akan mengurangi resiko dari UI thread yang keblock.

2. Synchronous work

SharedPreferences memiliki support untuk proses syncrhonous. Fungsi commit( ) untuk memperbarui data terlihat aman dipanggil dari UI thread, tetapi fungsi ini sebenarnya melakukan operasi I/O yang berat. Ini merupakan skenario yang memungkinkan terjadinya ANRs dan UI jank. Untuk mencegah hal ini DataStore tidak mensupport proses synchronous yang siap untuk digunakan. DataStore menyimpan preferences pada file dan semua proses dilakukan di Dispatchers.IO, menjaga agar UI thread tidak keblock.

Namun, jika tetap ingin synchronous, hal tersebut dapat dilakukan dengan bantuan coroutine builders.

3. Error handling

SharedPreferences bisa saja mengakibatkan runtime error, dan aplikasi jadi crash. Sedangkan DataStore menyediakan cara untuk melakukan catch untuk setiap exception yang terjadi ketika membaca atau menulis data, dengan mengandalkan mekanisme error oleh Flow.

4. Type safety

Menggunakan Proto DataStore, kita bisa melakukan definisi awal sebuah skema untuk data model dan mendapatkan manfaat lainnya dari full type safety

5. Data consistency

Perubahan data pada SharedPrefrences dapat terjadi kapan pun dan dimana saja pada aplikasi ( apalagi jika developer tidak memiliki arsitektur project yang bagus ). Hal ini mengakibatkan kita bisa saja mendapatkan data yang tidak konsisten. Sedangkan, DataStore memiliki ACID guarantees. Ini juga menyediakan “read after write”, yang mana setiap data yang diperbarui akan tergambar di value yang dibaca.

6. Migration support

SharedPreferences tidak memiliki mekanismke migrasi, sedangkan DataStore memiliki cara mudah untuk melakukan migrasi data.

Preferences DataStore vs Proto DataStore

Perbandingan Preferences DataStore dengan Proto DataStore
  • Jika kamu menggunakan key-value pairs untuk membaca dan menulis data, dan ingin migrasi cepat dari SharedPrefrences dengan sedikit perubahan, tapi tetap mendapatkan manfaat dari DataStore, kamu bisa menggunakan Preferences DataStore
  • Jika kamu ingin belajar tentang Protocol Buffers dan mendapatkan manfaat peningkatak pembacaan data, dan jika data tersebut berupa enums atau lists, dan manfaat lainnya dari DataStore, makan gunakan Proto DataStore

Proto DataStore vs Room

Jika bentuknya seperti list juga, kenapa tidak menggunakan Room?

Jika kamu menggunakan dataset kompleks yang lebih besar dari 10 Kb, dan kemungkinan besar bakalan membutuhkan pembaruan secara partial, atau data yang saling terikat di data set yang berbeda, maka kamu harus mempertimbangkan untuk menggunakan Room. Jika tidak dan datanya sederhana maka DataStore adalah pilihan terbaik.

Perbandingan Proto DataStore dengan Room

Sekian dulu tulisan kali ini silahkan ditunggu tulisan berikutnya, moga bermanfaat ya 😀. Di website ini terdapat berbagai tulisan menarik lainnya loh, seperti berikut:

source: Introduction to Jetpack DataStore by Simona Stojanovic

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *