2017-09-20 23 views
15

मुझे एंड्रॉइड आर्किटेक्चरल कंपोनेंट्स से एंड्रॉइड और लाइवडाटा में आरएक्सजेवा का उपयोग करने का कारण नहीं मिल रहा है। यह वास्तव में उपयोगी होगा यदि दोनों के बीच उपयोग और अंतर को कोड के रूप में नमूना उदाहरण के साथ समझाया गया है जो कि अंतर के बीच अंतर बताता है दोनों।एंड्रॉइड में आरएक्सजेवा का उपयोग कब करें और एंड्रॉइड आर्किटेक्चरल कंपोनेंट्स से लाइवडाटा का उपयोग कब करें?

उत्तर

20

एंड्रॉइड लाइवडाटा सक्रिय पर्यवेक्षक पैटर्न का एक संस्करण है, जिसमें सक्रिय/निष्क्रिय संक्रमण शामिल हैं। इस प्रकार, यह अपने दायरे में बहुत ही सीमित है।

Android LiveData में वर्णित उदाहरण का उपयोग करके, स्थान डेटा की निगरानी करने के लिए एक वर्ग बनाया गया है, और आवेदन स्थिति के आधार पर पंजीकरण और पंजीकरण रद्द कर दिया गया है।

आरएक्सजेवा ऑपरेटरों को प्रदान करता है जो अधिक सामान्यीकृत होते हैं। मान लेते हैं कि इस नमूदार स्थान डेटा प्रदान करेगा करते हैं:

Observable<LocationData> locationObservable; 

नमूदार के कार्यान्वयन Observable.create() का उपयोग कर संचालन कॉल बैक मैप करने के लिए का निर्माण किया जा सकता है। जब पर्यवेक्षित सब्सक्राइब किया जाता है, तो कॉल बैक पंजीकृत होता है, और जब इसकी सदस्यता समाप्त हो जाती है, तो कॉल बैक अपंजीकृत होती है। कार्यान्वयन उदाहरण में प्रदान किए गए कोड के समान ही दिखता है।

चलो यह भी मान लें कि आपके पास एक नमूदार सच का उत्सर्जन करता है कि जब आवेदन सक्रिय है:

Observable<Boolean> isActive; 

तो आप निम्नलिखित

Observable<LocationData> liveLocation = 
    isActive 
    .switchMap(active -> active ? locationObservable : Observable.never()); 

switchMap() ऑपरेटर द्वारा LiveData की सभी कार्यक्षमता प्रदान कर सकते हैं या तो स्ट्रीम के रूप में वर्तमान स्थान प्रदान करेगा, या कुछ भी नहीं यदि एप्लिकेशन सक्रिय नहीं है। एक बार आपके पास liveLocation देखने योग्य हो, तो RxJava ऑपरेटरों का उपयोग करके आप इसके साथ बहुत सी चीजें कर सकते हैं। मेरा पसंदीदा उदाहरण है:

liveLocation.distinctUntilChanged() 
    .filter(location -> isLocationInAreaOfInterest(location)) 
    .subscribe(location -> doSomethingWithNewLocation(location)); 

यह स्थान बदलने पर ही कार्रवाई करेगा, और स्थान दिलचस्प है। आप समान ऑपरेशन बना सकते हैं कि गति निर्धारित करने के लिए समय ऑपरेटरों को गठबंधन करें। सबसे महत्वपूर्ण बात यह है कि आप आरएक्सजेवा ऑपरेटरों का उपयोग करते हुए मुख्य धागे, या पृष्ठभूमि धागे, या एकाधिक धागे में संचालन के बारे में विस्तृत नियंत्रण प्रदान कर सकते हैं।

आरएक्सजेवा का बिंदु यह है कि यह पुस्तकालय से प्रदान किए गए संचालन का उपयोग करके, या यहां तक ​​कि आपके द्वारा प्रदान किए जाने वाले कस्टम ऑपरेशंस का उपयोग करके एक ब्रह्मांड में नियंत्रण और समय को जोड़ता है।

लाइवडाटा उस ब्रह्मांड के केवल एक छोटे हिस्से को संबोधित करता है, liveLocation के निर्माण के बराबर है।

+1

धन्यवाद, लाइवडाटा दस्तावेज़ अब किसी स्थान नमूना का संदर्भ नहीं लेते हैं। यहां अधिक दिलचस्प अंक हैं (एक स्थान नमूना के साथ): http://androidkt.com/livedata/ –

संबंधित मुद्दे