हाय मैं rxjava2
के बारे में जो async के संचालन के लिए मूल रूप से है पढ़ रहा हूँ। मैंने पाया कि इसमें एक ऑपरेटर अवधारणा है जो एंड्रॉइड में AsyncTask
नहीं है।लाभ से अधिक AsyncTask
rxjava2
AsyncTask
की तुलना में अलग और कैसे है?
हाय मैं rxjava2
के बारे में जो async के संचालन के लिए मूल रूप से है पढ़ रहा हूँ। मैंने पाया कि इसमें एक ऑपरेटर अवधारणा है जो एंड्रॉइड में AsyncTask
नहीं है।लाभ से अधिक AsyncTask
rxjava2
AsyncTask
की तुलना में अलग और कैसे है?
RxJava "मूल रूप से async ऑपरेशन के लिए" नहीं है। यह इसका एक पहलू है।
asyncTask
का उपयोग कर सकते हैं।Flowable
जंजीरों का उपयोग करके कुछ अनुप्रयोगों के लिए दबाव आवश्यकताओं वापस का प्रबंधन करता है, जबकि Observable
चेन कोई वापस दबाव आवश्यकताओं है। पूर्व उपयुक्त है जहां बफरिंग की आवश्यकता है या गिराए गए सूचना की स्पष्ट स्वीकृति की आवश्यकता है।asyncTask
बस असीमित कार्यों को संभालता है।
'एसिंक टास्क' का उल्लेख करने के लायक हो सकता है, जहां एक एंड्रॉइड निर्माण है, जहां आरएक्सजेवा शुद्ध जावा है, न कि यह ओपी के मूल की गुणवत्ता को बेहतर बनाता है! –
AsyncTask
डेवलपर्स के लिए एंड्रॉइड का डिफ़ॉल्ट टूल है जो यूआई को अवरुद्ध किए बिना यूआई स्क्रीन के संदर्भ में कुछ सरल लंबे समय तक चलने वाले काम करने की आवश्यकता है।
AsyncTask के साथ मुख्य समस्या है:
कई वेब सेवा कॉल:
AsyncTask
में इस का समाधान हमारे गतिविधि/टुकड़ा में एक आंतरिक AsyncTask उपवर्ग बनाते हैं, में नेटवर्क कार्रवाई करने के लिए पृष्ठभूमि, और उस ऑपरेशन का नतीजा लें और यूआई को मुख्य धागे में अपडेट करें।
मेमोरी/संदर्भ लीक आसानी से बनाई गई हैं एक आंतरिक वर्ग है और इस प्रकार बाहरी वर्ग इसके अलावा करने के लिए एक अंतर्निहित संदर्भ, क्या हुआ अगर हम श्रृंखला एक और लंबे आपरेशन करना चाहते हैं रखती है:
इस दृष्टिकोण कुछ मुद्दों और सीमाएं हैं नेटवर्क कॉल के बाद? हमें दो AsyncTasks घोंसला करना होगा जो पठनीयता को काफी कम कर सकते हैं।
त्रुटि निवारण
कुछ गलत हो जाता है, तो क्या होता है? दुर्भाग्यवश, इसके लिए कोई आउट ऑफ़ द बॉक्स समाधान नहीं है। और डिवाइस रोटेशन जैसी अन्य समस्या, बैक प्रेस हैंडल इत्यादि।
हैंडल त्रुटि RxJava का उपयोग करने में
इस तरह है:
webService.doSomething(someData)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
result -> resultText.setText("It worked!"),
e -> handleError(e));
दूसरा, कई वेब सेवाओं में कॉल।
public Observable<List<Weather>> getWeatherForLargeUsCapitals() {
return cityDirectory.getUsCapitals()
.flatMap(cityList -> Observable.from(cityList))
.filter(city -> city.getPopulation() > 500,000)
.flatMap(city -> weatherService.getCurrentWeather(city)) //each runs in parallel
.toSortedList((cw1,cw2) -> cw1.getCityName().compare(cw2.getCityName()));
}
आशा है कि यह आपकी मदद कर सके !!
"डिवाइस रोटेशन, बैक प्रेस हैंडल इत्यादि" से आपका क्या मतलब है। - Asyntask rxjava के बारे में क्या चलते रहते हैं? –
यदि आप RxLifecycle लाइब्रेरी का उपयोग करते हैं तो .compose (bindToLifecycle()) लाइफसाइक्ल कॉलबैक को संभाल लें। –
यह क्या करता है '। (विरोध) bindToLifecycle()) '? क्या यह रोटेशन और बैक प्रेस पर रद्द करता है? –
@VygintasB मुझे पूरा यकीन है कि यदि आप उचित रूप से सब्सक्रिप्शन को संभाल नहीं पाते हैं, तो यह मेमोरी लीक दे सकता है, और यह कहने के लिए थोड़ा भ्रामक है कि यह नहीं है, और गलत तुलना है। –
मुझे ओपी के जवाब को कम करने में कोई बिंदु नहीं दिख रहा है। @ बॉबडाल्जिश का जवाब अनियमित भ्रम को कम करने के लिए उठाया जाना चाहिए। – Solidak