2016-07-17 12 views
13

के बीच मतभेद मैं RxJava1 https://github.com/ReactiveX/RxJava/releases और RxJava2 के दस्तावेज़ों को देख रहा हूं और ऐसा लगता है कि आरएक्सजेवा 2 में जावा स्ट्रीम है।RxJava1 और RxJava2

कोई अन्य अलग?

मैं संस्करण 1.1.3 के साथ काम कर रहा है, लेकिन मुझे यकीन है कि अगर यह बाद से हम पहले से ही जावा हमारे कोड

सादर में 8 धाराओं का उपयोग कर रहे यह RxJava2 पर ले जाने के लायक है नहीं कर रहा हूँ।

+2

उदाहरण की तरह बदलने के लिए मैं कहूँगा कि अद्वितीय अंतर यह है कि यह नया [जावा स्ट्रीम एपीआई] (https का उपयोग करता है की आवश्यकता होगी: // docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html) जिसे जावा 8 में पेश किया गया था। – Andreas

+0

तो जावा 8 होने पर बिंदु क्या है? क्या जावा 8 स्ट्रीम और आरएक्सजेवा 2 स्ट्रीम अलग है? – paul

+1

क्या आपने अपना दूसरा लिंक भी पढ़ा था? * "RxJava 1.x सीधे प्रतिक्रियाशील स्ट्रीम एपीआई को लागू नहीं करता है" * और * "RxJava 2.x सीधे प्रतिक्रियाशील स्ट्रीम एपीआई को लक्षित करेगा" *। यह मेरे लिए एक बड़ा अंतर लगता है: एपीआई को सीधे लागू करने के लिए सीधे एपीआई को लागू नहीं करने से इसे बदलना। – Andreas

उत्तर

21

दोनों RxJava 1.x और 2.x जावा 6+ के लिए डिज़ाइन किए गए हैं और इस प्रकार हम किसी भी संस्करण में जावा 8 स्ट्रीम का समर्थन नहीं कर सकते हैं। यह निर्णय लिया गया था कि एंड्रॉइड डिवाइस और संस्करणों के असंख्य समर्थन को समर्थन दें जो कभी भी जावा 8 संगत रनटाइम में अपडेट नहीं होंगे। यदि आपको जावा 8 समर्थन की आवश्यकता है, तो Pivotal से Reactor-Core का उपयोग करने पर विचार करें।

दोनों के बीच बड़ा अंतर यह है कि 2.x सीधे प्रतिक्रियाशील-स्ट्रीम एसपीआई को लक्षित करता है और इसके लिए, इसे पूरी तरह से खरोंच से फिर से लिखा गया है। वर्तमान में हम विकास पूर्वावलोकन मोड में हैं जिन्हें आप 2.x branch readme में वर्णित अनुसार एक्सेस कर सकते हैं।

2.x की पूरी पुनर्लेखन ने हमारी स्मृति खपत और प्रदर्शन में काफी सुधार किया; here is a benchmark जो विभिन्न संस्करणों और पुस्तकालयों की तुलना करता है।

एपीआई सतह पर, हम 1.x सिरों पर मौजूद सभी ऑपरेटरों का समर्थन रखने की योजना बना रहे हैं और संभवतः 1.x सिरों पर समर्थन से पहले कुछ वर्षों के लिए दोनों संस्करणों का विस्तार कर सकते हैं।

चूंकि 2.x एक नया आर्किटेक्चर है, कई पुस्तकालयों (उदाहरण के लिए, रेट्रोफिट) को अद्यतन भी किया जाना है; जो संभवतः इस अगस्त के अंत से पहले नहीं होगा या साथ ही पकड़ने के लिए कई महीने लग सकते हैं। Here is the wiki page जिसमें मतभेदों की मुख्य विशेषताएं शामिल हैं।

14

मैं my sample project-link

में RxJava2 को लागू किया है के रूप में RxJava2 और RxJava1 के बीच मतभेद के बाद:

  1. RxJava 1.x और RxJava 2.x पक्ष-साथ होने की अनुमति देने के , आरएक्सजेवा 2.x मेवेन निर्देशांक io.reactivex.rxjava2:rxjava:2.x.y के तहत है और कक्षाएं io.reactivex से नीचे पहुंच योग्य हैं।

  2. 1.x से 2.x तक स्विच करने वाले उपयोगकर्ता को अपने आयात को फिर से व्यवस्थित करना होगा, लेकिन ध्यान से।

  3. onCompleted ->onComplete - बिना अनुगामी घ

  4. CompositeSubscription ->CompositeDisposable - CompositeDisposableCompositeSubscription के रूप में और Subscription हटा दिया गया है

  5. Func1 ->Function

  6. Func2 ->BiFunction

  7. limit ऑपरेटर हटा दिया गया है - उपयोग take RxJava2

RxJava 2.0 में पूरी तरह से प्रतिक्रियाशील-स्ट्रीम विनिर्देश की चोटी पर खरोंच से फिर से लिखा गया है। विनिर्देश स्वयं RxJava 1.x से विकसित हुआ है और प्रतिक्रियाशील प्रणालियों और पुस्तकालयों के लिए एक सामान्य बेसलाइन प्रदान करता है।

क्योंकि प्रतिक्रियाशील-स्ट्रीम में एक अलग वास्तुकला है, यह कुछ प्रसिद्ध आरएक्सजेवा प्रकारों में परिवर्तनों को अनिवार्य करता है।

RxJava2 बेहतर प्रदर्शन और कम स्मृति उपयोग RxJava1

से अधिक है [स्रोत:https://github.com/ReactiveX/RxJava/wiki/What%27s-different-in-2.0]

1

प्रमुख अंतर यह है .filter ऑपरेटर के लिए लागू होता है। डॉक्स द्वारा कहा गया है:

इसके अलावा, एक विधेय की आवश्यकता होती है ऑपरेटरों को अब Func1<T, Boolean> का उपयोग लेकिन Predicate<T> का एक अलग, आदिम-लौटने प्रकार है (कोई autoboxing की वजह से बेहतर इनलाइनिंग अनुमति देता है)।

तो .filter ऑपरेटर के लिए, आप नीचे दिए

 RxTextView.textChanges(editText) 
      .debounce(400, TimeUnit.MILLISECONDS) 
      .filter(new Predicate<CharSequence>() { 
       @Override 
       public boolean lengthOk(CharSequence charSequence) { 
        return charSequence.length() > 3; 
       } 
      }) 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(/* attach your observer */); 
संबंधित मुद्दे