RxJava, RxAndroid cơ bạn dạng.quý khách hàng vẫn xem: Rxjava là gì

I. Reactive sầu Programming là gì?

Reactive sầu Programing mà lại một phương pháp xây dựng triệu tập vào những luồng dữ liệu ko đồng hóa và quan sát sự biến hóa của những luồng tài liệu không nhất quán kia, lúc gồm sự chuyển đổi sẽ sở hữu được hành động giải pháp xử lý tương xứng. Vì đây là luồng tài liệu ko đồng bộ cần các module code cùng lúc chạy trên những thread khác nhau trường đoản cú kia rút ngắn thời gian triển khai nhưng không làm cho bloông xã main thread.

Bạn đang xem: Rx java — sự khác biệt giữa concatmap và flatmap trong rxjava là gì

II. RxJava

RxJava cơ bản là một trong thư viện hỗ trợ các sự khiếu nại không đồng điệu được cải cách và phát triển theo Observer Pattern. Quý khách hàng rất có thể tạo nên luồng tài liệu không đồng điệu bên trên bất kỳ thread như thế nào, biến hóa dữ liệu cùng thực hiện tài liệu bằng Observer. Thư viện RxJava cung cấp những loại Operator hoàn hảo nhỏng maps, combine, merge , filter cùng các đồ vật không giống có thể được vận dụng mang đến luồng dữ liệu.

III. RxAndroid

RxAndroid được quan trọng đặc biệt thực hiện mang lại căn nguyên Android được cải cách và phát triển dựa trên RxJava. Đặc biệt Schedulers được bổ sung cập nhật cho RxAndroid nhằm cung ứng cho đa luồng vào ứng dụng Android. Schedulers sẽ giúp các bạn phân loại luồng chạy đến từng module code làm sao cho cân xứng. Một vài luồng chạy phổ cập được áp dụng qua Schedulers.

AndroidSchedulers.mainThread () Cung cấp quyền truy vấn vào Android Main Thread / UI Thread.Schedulers.newThread () Thread bắt đầu sẽ được tạo thành mỗi khi một nhiệm vụ được tạo nên.

IV. Những thành phần đặc biệt quan trọng trong RxJava:

Về cơ phiên bản RxJava có nhì nhân tố chính: Observable và Observer. Thêm vào kia, gồm có thiết bị khác ví như Schedulers, Operators cùng Subscription là các thành phần vào vai trò như nhiều luồng, thao tác làm việc dữ liệu, và kết nối. Chúng ta vẫn cùng có tác dụng quen với từng thành phần: Observable: Là luồng tài liệu tiến hành một vài quá trình và vạc ra tài liệu.Observer : Là yếu tắc đi kèm không thể không có của Observable. Nó dìm tài liệu được phân phát ra vì Observable. Subcription: Là mối liên kết giữa Observable với Obhệ thống. cũng có thể có nhiều Observer đăng ký một Observable độc nhất vô nhị. Operator: Hỗ trợ mang lại việc sửa thay đổi dữ liệu được phân phát ra do Observable trước khi observer dìm bọn chúng. Schedulers: Scheduler quyết định thread mà lại Observable đang phân phát ra tài liệu với trên thread nào ObVPS vẫn dấn tài liệu.

1. Cách chế tạo Observable

Chúng ta bao gồm 5 nhiều loại Observable đi kèm là 5 một số loại Obhệ thống khớp ứng. Mỗi nhiều loại Observable được sử dụng trong số ngôi trường hòa hợp không giống nhau dựa vào con số cùng một số loại thành phần được Observable phát ra.

*

Trước tiên bọn họ đã điểm qua 1 vài cách thức phổ biến để tạo thành Observable:

2. Cách tạo nên Observer

Đối cùng với từng một số loại Observer không giống nhau bọn họ gồm cách tạo nên với triển khai khác biệt tuy vậy gần như khá dễ dàng và đơn giản. Đây là ví dụ nổi bật nhất để tạo ra Observer:

private Obhệ thống getAnimalsObserver() return new Observer() Override public void onComplete() Log.d(TAG, "All items are emitted!"); ; onSubscribe(): Pmùi hương thức sẽ được Call khi một Obhệ thống đăng ký vào Observable. onNext(): Phương thức này sẽ tiến hành call Khi Observable ban đầu phát ra tài liệu. onError(): Trong ngôi trường hợp gồm lỗi, phương thức onError() sẽ tiến hành Điện thoại tư vấn.onComplete(): Lúc một Observable chấm dứt việc phạt ra tài liệu, onComplete() sẽ tiến hành Hotline.

Xem thêm: Polling Là Gì, Nghĩa Của Từ Polling, Nghĩa Của Từ Polling Trong Tiếng Việt

3. Tạo Obhệ thống theo dõi Observable

Đây là các phương thức cơ phiên bản để khiến cho Observer đăng ký quan sát và theo dõi Observable.

animalsObservable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(animalsObserver);subscribeOn(Schedulers.io ()): Báo cho Observable chạy nhiệm vụ trên một chuỗi nền.observOn(AndroidSchedulers.mainThread ()): Yêu cầu Obhệ thống nhận dữ liệu trên luồng bao gồm nhằm bạn cũng có thể thực hiện các hành vi liên quan đến hình ảnh.

4. Disposable

Disposable được áp dụng nhằm hủy sự liên kết của Subhệ thống cùng với Subsevable Khi không thể cần thiết vấn đề này hết sức hữu ích nhằm tách câu hỏi nhỉ bộ nhớ lưu trữ. lúc Obhệ thống kết nối được cùng với Observable vào onSubcribe() ta đang nhận thấy Disposable. Để diệt sự kết nối vào onDestroy() của Activity bạn nên được gọi hàm dispose() của Disposable.

5. Operator

RxJava hỗ trợ tập thích hợp béo các operator cung cấp đến câu hỏi làm việc với dữ liệu vậy cần operators được phân loại dựa vào các loại công việc bọn chúng làm. ví dụ như nhỏng team chế tạo Observable: create, just, fromArray,... Nhóm thanh lọc dữ liệu: filter, skip, last, take, ... Nhóm chế tạo Observable từ dữ iệu của Observable không giống như: buffer, bản đồ, flatmaps,...Lưu ý lúc áp dụng nhiều Operator thì hiệu quả của Operator trước đang truyền mang lại Operator sau.Bạn hoàn toàn có thể tìm hiểu thêm tại đây

V. Ví dụ:

Sau đó là ví dụ cụ thể cho từng nhiều loại Observable được nói phía trên:Trong những ví dụ bản thân sử dung Custom object Note:

public class lưu ý int id; String note; // getters an setters

1. Observable & Observer:

Được thực hiện các nhất trong những toàn bộ. Observable hoàn toàn có thể vạc ra ko hoặc các bộ phận.

public class ObserverActivity extends AppCompatActivity private static final String TAG = ObserverActivity.class.getSimpleName(); private Disposable disposable; /** * Simple Observable emitting multiple Notes * - * Observable : ObVPS */ Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_observer); Observable notesObservable = getNotesObservable(); Obhệ thống notesObserver = getNotesObserver(); notesObservable.observeOn(Schedulers.io()) .subscribeOn(AndroidSchedulers.mainThread()) .subscribeWith(notesObserver); private Obhệ thống getNotesObserver() return new Observer() Override public void onComplete() Log.d(TAG, "onComplete"); ; private Observable getNotesObservable() final List notes = prepareNotes(); return Observable.create(new ObservableOnSubscribe() Override public void subscribe(ObservableEmitter emitter) throws Exception for (Note note : notes) if (!emitter.isDisposed()) emitter.onNext(note); // all notes are emitted if (!emitter.isDisposed()) emitter.onComplete(); ); private List prepareNotes() List notes = new ArrayList(); notes.add(new Note(1, "Buy tooth paste!")); notes.add(new Note(2, "Call brother!")); notes.add(new Note(3, "Watch Narcos tonight!")); notes.add(new Note(4, "Pay power bill!")); return notes; Override protected void onDestroy() super.onDestroy(); disposable.dispose(); Output:

onSubscribeonNext: Buy tooth paste!onNext: Hotline brother!onNext: Watch Narcos tonight!onNext: Pay power bill!onComplete

2. Single và SingleObsever

Single luôn phạt ra duy nhất cực hiếm hoặc một lỗi. Observable có thể thực hiện được quá trình này nhưng lại Single luôn luôn luôn bảo đảm rằng luôn luôn có 1 phần tử được trả về. Chính do chỉ gồm 1 phần tử bắt buộc SingleObhệ thống không tồn tại onNext() mà chỉ gồm onSuccess() nhằm nhận tài liệu trả về.

public class SingleObserverActivity extends AppCompatActivity private static final String TAG = SingleObserverActivity.class.getSimpleName(); private Disposable disposable; /** * Single Observable emitting single Note * Single Observable is more useful in making network calls * where you expect a single response object khổng lồ be emitted * - * Single : SingleObVPS */ // TODO - liên kết to Retrofit tutorial Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_single_observer); Single noteObservable = getNoteObservable(); SingleObserver singleObhệ thống = getSingleObserver(); noteObservable .observeOn(Schedulers.io()) .subscribeOn(AndroidSchedulers.mainThread()) .subscribe(singleObserver); private SingleObhệ thống getSingleObserver() return new SingleObserver() Override public void onError(Throwable e) Log.d(TAG, "onError: " + e.getMessage()); ; private Single getNoteObservable() return Single.create(new SingleOnSubscribe() Override public void subscribe(SingleEmitter emitter) throws Exception lưu ý note = new Note(1, "Buy milk!"); emitter.onSuccess(note); ); Override protected void onDestroy() super.onDestroy(); disposable.dispose(); Output

onSubscribeonSuccess: Buy milk!

3. Maybe & MaybeObserver

Maybe rất có thể hoặc ko phạt ra một quý giá. Maybe được sử dụng khi chúng ta sẽ mong mỏi chờ 1 phần tử được phân phát ra tùy theo từng ngôi trường vừa lòng xảy ra. Nhỏng lúc chúng ta query note by Id vào database nó có thể bao gồm hoặc cũng có thể ko.

Xem thêm: 3 Đường Thẳng Đồng Quy Là Gì, Chuyên Đề Tìm M Để 3 Đường Thẳng Đồng Quy

public class CompletableObserverActivity extends AppCompatActivity { private static final String TAG = CompletableObserverActivity.class.getSimpleName(); private Disposable disposable; /** * Completable won"t emit any chiến thắng, instead it returns * Success or failure state * Consider an example of making a PUT request to hệ thống lớn update * something where you are not expecting any response but the * success status * - * Completable : CompletableObVPS */ // TODO - links to Retrofit tutorial Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_completable_observer); chú ý note = new Note(1, "Home work!"); Completable completableObservable = updateNote(note); CompletableObhệ thống completableObhệ thống = completableObserver(); completableObservable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(completableObserver); /** * Assume this making PUT request khổng lồ hệ thống khổng lồ update the lưu ý */ private Completable updateNote(lưu ý note) return Completable.create(new CompletableOnSubscribe() Override public void subscribe(CompletableEmitter emitter) throws Exception if (!emitter.isDisposed()) Thread.sleep(1000); emitter.onComplete(); ); private CompletableObhệ thống completableObserver() { return new CompletableObserver() Override protected void onDestroy() super.onDestroy(); disposable.dispose(); Output

onSubscribeonComplete: chú ý updated successfully!

5. Flowable & Observer

Được sử dụng lúc một Observable tạo nên số lượng bự những sự khiếu nại / dữ liệu nhưng ObVPS có thể xử trí. Flowable rất có thể được sử dụng lúc mối cung cấp tạo nên 10k+ sự khiếu nại với Onhệ thống cần thiết tiêu trúc toàn bộ.Flowable áp dụng phương thức Backpressure nhằm cách xử lý tài liệu tách lỗi MissingBackpressureException và OutOfMemoryError.

public class FlowableObserverActivity extends AppCompatActivity private static final String TAG = FlowableObserverActivity.class.getSimpleName(); private Disposable disposable; /** * Simple example of Flowable just to lớn show the syntax * the use of Flowable is best explained when used with BackPressure * Read the below liên kết to know the best use cases khổng lồ use Flowable operator * https://github.com/ReactiveX/RxJava/wiki/What%27s-different-in-2.0#when-to-use-flowable * - * Flowable : SingleObhệ thống */ Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_flowable_observer); Flowable flowableObservable = getFlowableObservable(); SingleObhệ thống obVPS = getFlowableObserver(); flowableObservable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .reduce(0, new BiFunction() Override public Integer apply(Integer result, Integer number) //Log.e(TAG, "Result: " + result + ", new number: " + number); return result + number; ) .subscribe(observer); private SingleObhệ thống getFlowableObserver() return new SingleObserver() Override public void onError(Throwable e) Log.e(TAG, "onError: " + e.getMessage()); ; private Flowable getFlowableObservable() return Flowable.range(1, 100); Override protected void onDestroy() super.onDestroy(); disposable.dispose(); Output


Chuyên mục: KHÁI NIỆM LÀ GÌ
Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *