Jetpack DataStore Nedir? Neden Kullanmalıyız?

Fevzi Ömür Tekin
2 min readOct 16, 2020

--

Herkese merhaba,
Bu yazımda Android Jetpack bileşenlerinden biri olan DataStore yapısından bahsedeceğim. DataStore Preferences ile örnekler vererek kod üzerinden açıklacağım.

Öyleyse DataStore nedir, niçin kullanmalıyız? Hakkında bilgiler vererek başlayalım!

DataStore nedir?

DataStore, SharedPreferences yerine Kotlin Coroutine ve Flow yapıları ile asekron olarak lokal verilerimizi depolamaya yarayan Jetpack bileşenidir.

Peki SharedPreferences varken neden bu yapıyı kullanmalıyız? İki yapıyı karşılaştırarak açıklayalım.

SharedPreferences vs DataStore

  • DataStore ve SharedPreferences her iki yapıda async API kullanır. Datastore hem yazmak hemde okumak için kullanırken, SharedPreferences sadece, değişkenleri değiştirirken dinlemek amacıyla kullanır.
  • DataStore, UI thread altında çalışması güvenlidir. UI thread ile çalışması ANR oluşumunu engeller.
  • DataStore, error handlingi destekler.
  • DataStore, kotlin coroutine ve flow yapılarını destekler.
Kaynak : Android Developer Blog

DataStore’a daha ayrıntılı bakarsak, yapımızda 2 farklı uygulama vardır. Bunlar;

  • Preferences DataStore , Verileri SharedPreferences gibi anahtar/değer çiftlerinde depolar, ancak herhangi bir tür güvenliği sağlamaz.
  • Proto DataStore, Verileri nesneler olarak depolar.

Her iki uygulamayı kullanarak da depolamayı sağlayabiliriz. Ancak Proto tür güvenliği sağlar. Ayrıca Protoyu kullanırken şema tanımlamanız gereklidir.

Bu şemayı app/src/main/proto/ dizinin altında tanımlamalısınız. Bu şema, kullanacağınız nesnelerin türlerini içermektedir.

Daha ayrıntılı bilgiye adresinden ulaşabilirsiniz.

Yazının başında da söylediğim gibi Preferences türünden kod örnekleri vererek size açıklamaya çalışacağım.

Şimdi kurulumuna ve kullanımına bakalım.

DataStore Preferences Kurulumu ve Kullanımı

build.gradle

build.gradle içinde bağımlılıklarımızı dahil ederek projemize datastore kütüphanelerinimizi eklemiş olduk.

İlk olarak DataStore Preferences yapısında sınıf oluşturduk , kullanacağımız veri yazma ve okuma fonksiyonlarını oluşturduk.

Viewmodel içerisinde viewModelScope kullanarak bu değerleri nasıl yazdırdırıp kullanabileceğimize basitçe gösterelim.

Yorum satırında yazdığım gibi, livedata türündeki değişkenimizi ViewModelımızı kullanacağımız Activity veya fragment sınıfımızda dinleyebilir, değişikliğe göre gerekli işlemleri yapabiliriz.

Veya Doğrudan veriyi collect edip okuyabiliriz.

Yararlanılan Kaynaklar ve Sonuç

Örneklerimizde görüldüğü üzere, DataStore Coroutine ve Flow yapısını kullanması avantaj sağlar. UI threadınde güvenli bir şekilde asekron işlem yapmasıda SharedPreferencesa göre daha güvenilir, daha kullanışlı bir çözümdür.

Sonraki yazılarda görüşmek üzere. 🖐🏼

--

--