DataStore बनाम SharedPreferences
जानें कि DataStore आधुनिक विकल्प क्यों है।
DataStore बनाम SharedPreferences, CoddyKit पर Android Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Android Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Android Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
छोटी सेटिंग्स संग्रहीत करना
लगभग हर ऐप को डेटा के छोटे-छोटे हिस्से याद रखने की आवश्यकता होती है: डार्क-मोड टॉगल, पिछली बार उपयोग किया गया टैब या उपयोगकर्ता नाम। ये की-वैल्यू प्राथमिकताएँ हैं, बड़ा रिलेशनल डेटा नहीं।
कई वर्षों तक Android इसके लिए SharedPreferences का उपयोग करता था। आज अनुशंसित समाधान DataStore है।
SharedPreferences क्या है
SharedPreferences एक सरल XML-आधारित की-वैल्यू स्टोर है। आपको एक एडिटर मिलता है, मान डालते हैं और उन्हें कमिट करते हैं।
- उपयोग में आसान
- फ़्रेमवर्क में अंतर्निहित
- सिंक्रोनस API, जो UI थ्रेड को रोक सकता है
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
prefs.edit().putBoolean("dark_mode", true).apply()
val dark = prefs.getBoolean("dark_mode", false)SharedPreferences की समस्याएँ
SharedPreferences की कुछ वास्तविक कमियाँ हैं:
getX()से पढ़ना कॉल करने वाले थ्रेड को रोक सकता है (अक्सर मुख्य थ्रेड को)commit()डिस्क I/O को सिंक्रोनस रूप से करता है- त्रुटियों का संकेत देने का कोई अंतर्निहित तरीका नहीं
- API प्रकार-सुरक्षित और प्रतिक्रियाशील नहीं है
DataStore का उपयोग करें
DataStore Kotlin के कोरूटीन और Flow पर आधारित आधुनिक विकल्प है। यह डिस्क का सारा काम मुख्य थ्रेड से अलग करता है और डेटा को एक ऑब्ज़र्वेबल स्ट्रीम के रूप में उपलब्ध कराता है।
इसके दो प्रकार हैं: Preferences DataStore (की-वैल्यू) और Proto DataStore (टाइप वाले ऑब्जेक्ट्स)।
डिज़ाइन के अनुसार एसिंक्रोनस
DataStore UI को कभी ब्लॉक नहीं करता। पढ़ने की क्रिया उस Flow के माध्यम से होती है जिसे आप कलेक्ट करते हैं, और लिखने की क्रियाएँ suspend फ़ंक्शन होती हैं जिन्हें आप कोरूटीन से कॉल करते हैं।
इसका अर्थ है कि सेटिंग्स को पढ़ना और लिखना मुख्य थ्रेड पर भी सुरक्षित है, क्योंकि भारी काम बैकग्राउंड डिस्पैचर पर होता है।
val darkMode: Flow<Boolean> = dataStore.data
.map { prefs -> prefs[DARK_MODE_KEY] ?: false }रिएक्टिव अपडेट
क्योंकि DataStore एक Flow उपलब्ध कराता है, मान बदलने पर आपका UI अपने-आप अपडेट हो जाता है। SharedPreferences के साथ आपको एक असुविधाजनक परिवर्तन श्रोता रजिस्टर करना पड़ता था।
Jetpack Compose में आप केवल फ्लो पर collectAsState() करते हैं और हर अपडेट पर स्क्रीन का पुनर्संयोजन हो जाता है।
ट्रांज़ैक्शनल और सुसंगत
DataStore में लिखने की क्रियाएँ ट्रांज़ैक्शनल होती हैं। अपडेट या तो पूरी तरह सफल होता है या पूरी तरह विफल, इसलिए आपको कभी आधा लिखा हुआ मान नहीं मिलता।
यह उसी प्रक्रिया के भीतर कई बार पढ़ने और लिखने के बीच डेटा की सुसंगतता की गारंटी भी देता है।
त्रुटि प्रबंधन
SharedPreferences I/O समस्याओं को चुपचाप दबा देता है। DataStore उन्हें सामने लाता है: पढ़ने की क्रिया फ्लो के माध्यम से IOException उत्सर्जित कर सकती है, जिसे आप catch करके उससे उबर सकते हैं।
val settings: Flow<Settings> = dataStore.data
.catch { e ->
if (e is IOException) emit(emptyPreferences())
else throw e
}
.map { /* map to your model */ }DataStore कब सही समाधान नहीं है
DataStore छोटे या मध्यम आकार के की-वैल्यू या टाइप वाले डेटा के लिए है। यह डेटाबेस नहीं है।
- बड़े डेटा सेट, क्वेरी और संबंधों के लिए: Room का उपयोग करें
- फ़ाइलों, चित्रों और मीडिया के लिए: फ़ाइल सिस्टम का उपयोग करें
- कुछ गिनी-चुनी सेटिंग्स के लिए: DataStore का उपयोग करें
निर्भरता जोड़ना
Preferences DataStore का उपयोग करने के लिए, अपने मॉड्यूल की Gradle फ़ाइल में आर्टिफ़ैक्ट जोड़ें। Proto DataStore के लिए अलग आर्टिफ़ैक्ट होता है।
dependencies {
implementation("androidx.datastore:datastore-preferences:1.1.1")
}SharedPreferences से माइग्रेट करना
आपको सब कुछ एक साथ फिर से लिखने की आवश्यकता नहीं है। DataStore, SharedPreferencesMigration उपलब्ध कराता है, जो पहली बार पढ़े जाने पर मौजूदा मानों को अपने-आप कॉपी कर देता है।
val Context.dataStore by preferencesDataStore(
name = "settings",
produceMigrations = { context ->
listOf(SharedPreferencesMigration(context, "settings"))
}
)त्वरित जाँच
DataStore को प्राथमिकता देने के कारणों की अपनी समझ जाँचें।
पुनरावलोकन
आपने जाना कि कुंजी-मान वाली सेटिंग्स के लिए DataStore आधुनिक विकल्प क्यों है:
- SharedPreferences मुख्य थ्रेड को रोक सकता है और प्रतिक्रियाशील नहीं है
- DataStore सुरक्षित अतुल्यकालिक पहुँच के लिए कोरूटीन और
Flowका उपयोग करता है - उचित त्रुटि प्रबंधन के साथ लेखन लेन-देनात्मक होता है
- दो प्रकार उपलब्ध हैं: Preferences और Proto
अगले चरण में आप व्यवहार में preferencesDataStore डेलीगेट का उपयोग करेंगे।
एआई शिक्षक के साथ Kotlin सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 36
- पाठ
- 152
अक्सर पूछे जाने वाले प्रश्न
क्या “DataStore बनाम SharedPreferences” पाठ निःशुल्क है?
हाँ — Android Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “DataStore बनाम SharedPreferences” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Android Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“DataStore बनाम SharedPreferences” में मैं क्या सीखूँगा?
जानें कि DataStore आधुनिक विकल्प क्यों है। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Android Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Android Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Android Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“DataStore बनाम SharedPreferences” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Android Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Android Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- DataStore बनाम SharedPreferences
- Preferences DataStore
- सेटिंग पढ़ना और लिखना
- Proto DataStore