SharedPreferences: bu nədir, Android açar-dəyər anbarı

Müəllif: IT Sectr Dərc olunub: 2026-03-12 Oxuma vaxtı: 9 dəq

SharedPreferences Android-də sadə parametrləri və tətbiq konfiqurasiyalarını saxlamaq üçün nəzərdə tutulmuş açar-dəyər məlumat anbarıdır. Məlumatlar cihazda XML faylında saxlanılır və yalnız onu yaradan tətbiq daxilində əlçatandır. Rəsmi sənədlərə əsasən Android Developers, 2025, SharedPreferences ibtidai tiplərin saxlanmasını dəstəkləyir: String, Int, Boolean, Float, Long və Set<String>. Bu, SQL sorğularına və ya birbaşa fayl sistemi ilə işləməyə ehtiyac olmadan kiçik həcmli istifadəçi parametrlərini saxlamaq üçün ən sadə və sürətli həll yoludur.

Əsas məqamlar

  • SharedPreferences — XML faylında sadə tətbiq parametrlərini saxlamaq üçün Android açar-dəyər anbarı.
  • Beş məlumat tipini dəstəkləyir: String, Int, Boolean, Float, Long və Set<String>.
  • Yazma əməliyyatları üçün sinxron (get) və asinxron (apply) işləyir, diskdə saxlanılır.
  • Məlumatlar fayl adına və giriş rejiminə (PRIVATE, MULTI_PROCESS) görə izolyasiya olunur.
  • Böyük həcmli məlumatlar üçün Google SharedPreferences əvəzinə DataStore və ya Room istifadə etməyi tövsiyə edir.

SharedPreferences nədir?

SharedPreferences — cihazın daxili yaddaşında XML faylında açar-dəyər cütlərini saxlamaq üçün Android-ə quraşdırılmış mexanizmdir. API Level 1-dən etibarən mövcuddur və əlavə kitabxanaların qoşulmasını tələb etmir. Əsas təyinat — istifadəçi parametrlərinin, interfeys vəziyyətinin, first-launch bayraqlarının və strukturlaşdırılmış verilənlər bazası tələb etməyən digər sadə məlumatların saxlanmasıdır.

Hər bir SharedPreferences faylı müəyyən bir ad və giriş rejimi ilə əlaqələndirilir. Varsayılan olaraq Context.MODE_PRIVATE rejimi istifadə olunur ki, bu da fayla girişi yalnız cari tətbiq ilə məhdudlaşdırır. Əvvəllər Android MODE_WORLD_READABLE və MODE_WORLD_WRITEABLE rejimlərini dəstəkləyirdi, lakin onlar API Level 17-dən etibarən köhnəlmiş elan edildi və Android 7.0 (API 24)-də təhlükəsizlik səbəbləri ilə tamamilə silindi.

Sadəliyinə baxmayaraq, SharedPreferences milyonlarla Android tətbiqində istifadə olunur. Google məlumatlarına görə, Google Play-də dərc edilmiş tətbiqlərin 90%-dən çoxu parametrləri saxlamaq üçün SharedPreferences istifadə edir. Bununla belə, mürəkkəb ssenarilər (böyük həcmli məlumatlar, tip təhlükəsizliyi, asinxronluq) üçün Google Android Jetpack kitabxanasından Preferences DataStore kimi daha müasir həlləri tövsiyə edir.

Saxlama formatı: cihazda XML

Fiziki olaraq SharedPreferences tətbiq qovluğunda XML faylı şəklində saxlanılır: /data/data/{package_name}/shared_prefs/{file_name}.xml. Fayl saxlanılan dəyərin növündən asılı olaraq <string>, <int>, <boolean>, <float> və <long> uşaq elementləri olan <map> kök elementini ehtiva edir. Fayl ölçüsü məhdud deyil, lakin böyük həcmli məlumatlar üçün (100 KB-dan çox) oxuma və yazma performansı nəzərəçarpacaq dərəcədə azalmağa başlayır.

SharedPreferences faylları standart olaraq şifrələnmir. Məlumatlar cihazın fayl sistemində açıq şəkildə saxlanılır. Həssas məlumatları (tokenlər, şifrələr) saxlamaq üçün AndroidX Security kitabxanasından EncryptedSharedPreferences istifadə etmək tövsiyə olunur, o, AES256-GCM vasitəsilə açarları və dəyərləri avtomatik şifrələyir.

SharedPreferences Android-də necə işləyir

SharedPreferences dövri disk sinxronizasiyası ilə yaddaşda keşləmə prinsipi ilə işləyir. Fayla ilk müraciət zamanı (getSharedPreferences vasitəsilə) Android XML faylını operativ yaddaşa yükləyir və onu Map obyektinə parslayır. Bütün sonrakı oxuma əməliyyatları diskdən təkrar oxunmadan yaddaşdan yerinə yetirilir. Bu, məlumatlara yüksək sürətli girişi təmin edir.

Yazma əməliyyatları Editor — daxili dəyişiklik buferindən istifadə edir. Tərtibatçı putString və ya putBoolean çağırdıqda, dəyişikliklər yaddaşda Editor obyektində saxlanılır. Diska faktiki yazma commit (sinxron) və ya apply (asinxron) metodu çağırıldıqda baş verir. Bu metodlar çağırılana qədər məlumatlar saxlanılmır və tətbiq qəflətən dayanarsa, dəyişikliklər itirilə bilər.

Giriş rejimləri və kontekst

SharedPreferences nümunəsini əldə etmək üçün iki metoddan istifadə olunur: getPreferences və getSharedPreferences. Birincisi yalnız Activity daxilində mövcuddur və Activity adı ilə fayl yaradır. İkincisi daha çevikdir, fayl adını və giriş rejimini qəbul edir və istənilən kontekstdən (Application, Activity, Service) əlçatandır. Tətbiqin moduluna və ya funksionallığına uyğun fayl adı ilə getSharedPreferences istifadə etmək tövsiyə olunur.

kotlin
// SharedPreferences əldə etmə
val prefs = context.getSharedPreferences(
    "user_settings", Context.MODE_PRIVATE
)

// Məlumat yazma
with(prefs.edit()) {
    putString("username", "Anna")
    putInt("age", 28)
    putBoolean("isLoggedIn", true)
    apply()
}

// Məlumat oxuma
val username = prefs.getString("username", "")
val age = prefs.getInt("age", 0)
val isLoggedIn = prefs.getBoolean("isLoggedIn", false)

MODE_MULTI_PROCESS (deprecated) istifadə edərkən SharedPreferences proseslər arasında sinxronlaşır. Lakin bu sinxronizasiya atomikliyi təmin etmir və Google multi-process ssenarilərində SharedPreferences istifadəsindən çəkinməyi tövsiyə edir. Belə hallar üçün ContentProvider, proseslərarası girişi olan Room və ya DataStore istifadə etmək daha yaxşıdır.

SharedPreferences-in əsas metodları

SharedPreferences açar üzrə məlumat oxumaq üçün metodlar dəsti və yazmaq üçün Editor interfeysi təqdim edir. Hər bir oxuma metodu iki parametr qəbul edir: açar və açar tapılmadıqda qaytarılan standart dəyər. Standart dəyər həmçinin qaytarılan dəyərin növünü müəyyən edir: getString String, getInt isə Int qaytarır və s.

Oxuma metoduYazma metoduMəlumat növü
getStringputStringString
getIntputIntInt
getBooleanputBooleanBoolean
getFloatputFloatFloat
getLongputLongLong
getStringSetputStringSetSet<String>

Editor və apply vs commit

Editor — buferdə dəyişiklikləri toplayan SharedPreferences-in daxili obyektidir. Bütün dəyişikliklər edildikdən sonra tərtibatçı commit() (sinxron yazma) və ya apply() (asinxron yazma) çağırır. Fərq kritikdir: commit diskə tam yazma tamamlanana qədər cari axını bloklayır və boolean (uğur/uğursuzluq) qaytarır, apply isə yazmaı fon axınında yerinə yetirir və dərhal idarəetməni qaytarır, lakin nəticə qaytarmır.

Bütün hallarda yazma nəticəsini bilmək lazım olmadıqda apply-dən istifadə etmək tövsiyə olunur. apply daha sürətlidir və UI axınını bloklamır. commit yalnız məlumatların uğurla saxlanıb-saxlanılmadığını bilmək kritik olduqda və ya multi-process rejimi ilə işləyərkən istifadə edilməlidir. Tək açarları silmək üçün remove metodu, tam təmizləmə üçün isə clear istifadə olunur. Bütün silmə əməliyyatları da Editor vasitəsilə yerinə yetirilir.

kotlin
// Çoxlu dəyişikliklər - bir apply
prefs.edit {
    putString("theme", "dark")
    putBoolean("notifications", false)
    remove("old_key")
}

// Dəyər dəyişmə dinləyicisi
prefs.registerOnSharedPreferenceChangeListener { prefs, key ->
    Log.d("TAG", "Açar dəyişdi: $key")
}

Android 12-dən (API 31) etibarən SharedPreferences Lifecycle vasitəsilə avtomatik abunədən çıxma ilə registerOnSharedPreferenceChangeListener dəstəyi ilə tamamlanmışdır. Bu, unudulmuş dinləyicilərlə bağlı yaddaş sızmalarının qarşısını almağa imkan verir. Köhnə versiyalarda tərtibatçı komponentin onDestroy və ya onStop-da əl ilə unregisterOnSharedPreferenceChangeListener çağırmalıdır.

SharedPreferences vs saxlama alternativləri

Geniş yayılmasına baxmayaraq, SharedPreferences Android-də bütün məlumat saxlama ssenariləri üçün universal həll deyil. Məlumatların həcmindən, tip təhlükəsizliyi və performans tələblərindən asılı olaraq, Google Android Jetpack və standart Android kitabxanasına daxil olan müxtəlif alternativləri tövsiyə edir.

Həll yoluNə zaman istifadə etməliÇatışmazlıqlar
SharedPreferencesKiçik parametrlər (100 açaradək)Tip təhlükəsizliyi yoxdur, sinxron oxuma
DataStoreKorutinlərlə orta mürəkkəblikdə parametrlərAPI 14-dən aşağı geriyə uyğunluq yoxdur
RoomStrukturlaşdırılmış məlumatlar və siyahılar3–5 parametr üçün həddən artıqdır
EncryptedSharedPreferencesHəssas məlumatlar və tokenlərAndroidX Security-dən asılılıq

DataStore — müasir alternativ

DataStore — Google tərəfindən SharedPreferences-in əvəzi kimi təqdim edilən Android Jetpack kitabxanasıdır. İki variant təklif edir: Preferences DataStore (SharedPreferences kimi açar-dəyər) və Proto DataStore (Protocol Buffers vasitəsilə tipli saxlama). DataStore asinxron iş üçün korutinlər və Flow istifadə edir, tip təhlükəsizliyini təmin edir və versiya miqrasiyalarını avtomatik idarə edir. Google bütün yeni layihələr üçün DataStore tövsiyə edir.

DataStore-un əsas üstünlüyü — API səviyyəsində asinxronluqdur. Bütün oxuma əməliyyatları Flow qaytarır, yazma əməliyyatları isə suspend-funksiyalardır. Bu, SharedPreferences-in sinxron oxunması zamanı mümkün olan UI axınının bloklanmasını tamamilə aradan qaldırır. Bundan əlavə, DataStore məlumatların ardıcıllığını təmin edir: yazma tranzaksiyada yerinə yetirilir və nasazlıq halında bütün dəyişikliklər geri qaytarılır.

SharedPreferences-in tətbiqdə istifadə nümunəsi

Praktik nümunəyə baxaq: Android tətbiqində dizayn mövzusu parametrləri (açıq/qaranlıq/sistem). İstifadəçi mövzu seçir və seçim SharedPreferences-də saxlanılır. Tətbiqin sonrakı işə salınmalarında mövzu saxlanılmış parametrlərdən bərpa olunur. İnterfeysin reaktiv yenilənməsi üçün SharedPreferences.OnSharedPreferenceChangeListener vasitəsilə dəyişikliklərin müşahidəsi istifadə olunur.

İstifadəçi parametrlərinin saxlanması

ThemePreferences sinfi yaradaq ki, o, mövzu üçün SharedPreferences ilə bütün işi inkapsul etsin. Sinif getTheme (oxuma), setTheme (yazma) və observeTheme (müşahidə) metodlarını təqdim edir. Parametrlər faylının adı "app_preferences" olacaq, MODE_PRIVATE rejimi ilə. Rahatlıq üçün açarlar companion object-də sabitlər kimi çıxarılıb.

kotlin
class ThemePreferences(context: Context) {
    companion object {
        private const val PREF_NAME = "app_preferences"
        private const val KEY_THEME = "theme_mode"
        const val THEME_LIGHT = "light"
        const val THEME_DARK = "dark"
        const val THEME_SYSTEM = "system"
    }

    private val prefs = context
        .getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)

    fun getTheme(): String =
        prefs.getString(KEY_THEME, THEME_SYSTEM) ?: THEME_SYSTEM

    fun setTheme(theme: String) {
        prefs.edit { putString(KEY_THEME, theme) }
    }

    fun observeTheme(callback: (String) -> Unit) {
        prefs.registerOnSharedPreferenceChangeListener { _, key ->
            if (key == KEY_THEME) {
                callback.invoke(getTheme())
            }
        }
    }
}

Activity və ya Fragment-də ThemePreferences nümunəsinin əldə edilməsi tətbiq konteksti vasitəsilə həyata keçirilir. İnisiallaşdırma zamanı cari mövzunu təyin etmək üçün getTheme çağırılır. İstifadəçi yeni mövzu seçdikdə setTheme çağırılır və observeTheme vasitəsilə interfeys Activity-ni yenidən başlatmadan yenilənir. Yaddaş sızmasının qarşısını almaq üçün onDestroy-da dinləyicidən çıxmağı unutmamaq vacibdir, xüsusən də Activity konfiqurasiya dəyişikliyi zamanı yenidən yaradılırsa.

Minimum hədəf versiyası Android 12+ olan tətbiqlər üçün LifecycleObserver ilə birlikdə registerOnSharedPreferenceChangeListener istifadə etmək tövsiyə olunur. Bu, komponentin həyat dövrü dəyişdikdə abunəni və abunədən çıxmağı avtomatik idarə edir. Köhnə versiyalar üçün abunə və abunədən çıxma əl ilə idarə edilməlidir ki, bu da SharedPreferences istifadə edən istehsal tətbiqlərində tez-tez səhv mənbəyidir.

Tez-tez verilən suallar

SharedPreferences-də obyektləri saxlamaq mümkündürmü?

SharedPreferences birbaşa yalnız ibtidai tipləri və Set<String>-i dəstəkləyir. Obyektləri saxlamaq üçün onları Gson və ya Moshi vasitəsilə JSON səthinə serializasiya etmək, putString ilə saxlamaq və oxuyarkən deserializasiya etmək lazımdır. Çox sayda sahəsi olan mürəkkəb obyektlər üçün JSON-serializasiya ilə SharedPreferences əvəzinə Room istifadə etmək tövsiyə olunur.

SharedPreferences thread-safe-dir?

Bəli, SharedPreferences thread-safe-dir. Bütün oxuma və yazma əməliyyatları SharedPreferences obyekti və onun Editor-u səviyyəsində sinxronlaşdırılır. Lakin multi-process rejimindən istifadə edərkən sinxronizasiya təmin edilmir. Bir tətbiq daxilində bir neçə axından rəqabətli giriş üçün SharedPreferences əlavə bloklamalar olmadan təhlükəsizdir.

Bütün SharedPreferences məlumatlarını necə təmizləmək olar?

SharedPreferences-dən bütün məlumatları tam təmizləmək üçün Editor-da clear() metodunu çağırın və apply vasitəsilə dəyişiklikləri tətbiq edin. XML faylını özünü silmək lazımdırsa, kontekstdə deleteSharedPreferences(name) istifadə edin. Parametrlər → Tətbiqlər → Məlumatı təmizlə vasitəsilə tətbiq məlumatlarının təmizlənməsi də bütün SharedPreferences fayllarını silir.

SharedPreferences yoxsa DataStore: hansını seçməli?

Yeni layihələr üçün Google SharedPreferences-in əvəzi olaraq DataStore-u tövsiyə edir. DataStore korutinlərlə asinxron işi, tip təhlükəsizliyini (Proto DataStore) və avtomatik miqrasiyaları təmin edir. SharedPreferences yalnız minimal versiyası API 14-dən aşağı olan layihələr və ya əlavə asılılıqlar olmadan sürətli inteqrasiya lazım olduqda seçilməlidir.

SharedPreferences-də məlumatları necə şifrələmək olar?

Məlumatların şifrələnməsi üçün AndroidX Security kitabxanasından EncryptedSharedPreferences istifadə edin. O, AES-256 GCM vasitəsilə açarları və dəyərləri avtomatik şifrələyir. Quraşdırma prosesi minimaldır: getSharedPreferences Android Keystore-dan master-açar göstərilməklə EncryptedSharedPreferences.create ilə əvəz olunur.

Nəticə

  • SharedPreferences — XML formatında sadə tətbiq parametrlərini saxlamaq üçün Android-ə quraşdırılmış açar-dəyər anbarı.
  • Altı məlumat tipini dəstəkləyir: String, Int, Boolean, Float, Long və standart dəyər təyini ilə Set<String>.
  • Oxuma əməliyyatları yaddaşdan (keş) yerinə yetirilir, yazma — sinxron commit və ya asinxron apply ilə Editor vasitəsilə.
  • Məlumatlar fayl adına və MODE_PRIVATE rejiminə görə izolyasiya olunur, yalnız yaradan tətbiq daxilində əlçatandır.
  • Həssas məlumatları saxlamaq üçün AES-256 şifrələməsi ilə EncryptedSharedPreferences istifadə edin.
  • Yeni layihələr üçün Google korutinlər və Flow ilə müasir asinxron alternativ olaraq DataStore-u tövsiyə edir.
  • SharedPreferences əlavə asılılıqlar olmadan 5–50 sadə parametrin sürətli saxlanması üçün ən yaxşı seçim olaraq qalır.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun