Android का ContentProvider क्यों बनाया गया था?


11

शीर्षक मेरे प्रश्न को पूरा करता है, लेकिन मूल रूप से जो मैं समझना चाहता हूं, उसे विस्तृत करने के लिए, एंड्रॉइड डिजाइनर ऐसे ऐप्स क्यों चाहते हैं जो सीधे SQLite डेटाबेस तक पहुंचने के बजाय एक सामग्री प्रदाता का उपयोग करने के लिए साझा डेटा के साथ काम करने की आवश्यकता है?

एकमात्र कारण जिसके बारे में मैं सोच सकता हूं वह है सुरक्षा क्योंकि कुछ फाइलों तक पहुंच केवल कुछ निश्चित प्रक्रियाओं की हो सकती है और इस तरह से कंटेंट प्रोवाइडर द्वारपाल होता है जो यह सुनिश्चित करता है कि डेटाबेस फ़ाइल को पढ़ने और / या लिखने की अनुमति देने से पहले प्रत्येक ऐप में उचित विशेषाधिकार हों। क्या ऐसा प्राथमिक कारण है कि ContentProvider क्यों बनाया गया?

जवाबों:


6

यह डेटा उपभोक्ताओं और डेटा प्रदाताओं को इन्सुलेट करने के सभी तरीकों से ऊपर है। यदि आप अपना कुछ डेटा सार्वजनिक करना चाहते हैं या कम से कम अन्य एप्लिकेशन के लिए उपलब्ध हैं, तो आप अपना कंटेंट प्रोवाइडर विकसित करते हैं या किसी मौजूदा का विस्तार करते हैं।

सही है कि यह सुरक्षा के दृष्टिकोण से एक्सेस को नियंत्रित करने के लिए सर्वर कर सकता है, लेकिन यह आपको जब चाहे अपने डेटा के भौतिक कार्यान्वयन को फिर से बनाने की अनुमति देता है। आपको केवल उस मामले में अपने सामग्री प्रदाता के बैक-एंड को अनुकूलित करना है। डेटा उपभोक्ता अनुप्रयोगों को फिर से लिखना नहीं होगा। वे वास्तविक अंतर्निहित कार्यान्वयन में किसी भी परिवर्तन से अनजान अपनी सामग्री रिज़ॉल्वर के माध्यम से आपके डेटा तक पहुंच बनाए रखेंगे।

इसके अलावा, एंड्रॉइड आपके कंटेंट प्रोवाइडर के केवल एक इंस्टेंस को ही इंस्टाल करेगा भले ही डेटा कई क्लाइंट्स द्वारा एक्सेस किया गया हो, इसलिए यह समवर्ती एक्सेस का ध्यान रखे बिना आपको इसकी परवाह किए बिना होगा।

अंत में, मुझे विश्वास है कि यह स्वच्छ स्टार्ट अप और शटडाउन की शराबी को भी संभाल लेगा।


1
मुझे लगता है कि इन्सुलेशन शायद सबसे अच्छा जवाब है। मैं समवर्ती अभिगम के बारे में आपकी बात से सहमत नहीं हूँ, SQLite और Android जावा इंटरफ़ेस संगामिति को संभालता है, ContentProvider स्वयं कई युगपत सूत्र को क्वेरी / सम्मिलित / अद्यतन करने की अनुमति देता है इसलिए यह वास्तव में आपके लिए कुछ नहीं कर रहा है।
satur9nine

3

ContentProviderभी अंतर संचार प्रक्रिया है कि आदेश अन्य तीसरे दल के अनुप्रयोगों के साथ संवाद करने में आवश्यक है के सभी बाहर सार। इस कोड को लिखना अपने आप में एक बहुत बड़ी पीड़ा होगी।


3 पार्टियां हमेशा डेटाबेस फ़ाइल को सीधे एक्सेस कर सकती हैं, वहां किसी भी अंतर-प्रक्रिया संचार की आवश्यकता नहीं होती है।
satur9nine

मुझे यकीन नहीं है कि आपका क्या मतलब है ... यदि कोई ऐप "थर्ड-पार्टी" है, तो परिभाषा के अनुसार यह एक अलग प्रक्रिया में मौजूद होना चाहिए (क्योंकि प्रत्येक एंड्रॉइड ऐप की अपनी मुख्य प्रक्रिया है)। इसके अलावा अगर एंड्रॉइड ओएस ने आपको अन्य एप्लिकेशन के कच्चे डेटा स्टोर तक सीधे पहुंच की अनुमति दी है, तो यह कुछ बड़े सुरक्षा मुद्दों को बढ़ाएगा।
एलेक्स लॉकवुड

1

कन्टैंटप्रॉइडर भी एक एब्स्ट्रैक्शन है जो डेटा को कैसे संग्रहीत / उत्पन्न किया जाता है, इसका विवरण छिपाता है। उदाहरण के लिए, मेरे एक ऐप में मेरे पास एक कंटेंट प्रोवाइडर है जो PNG इमेज देता है। इन छवियों को कहीं भी संग्रहीत नहीं किया जाता है, वे मांग पर उत्पन्न होते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.