Rxjava & Rxandroid

RxJava, RxAndroid cơ phiên bản.Quý khách hàng đang xem: Rxjava là gì

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

Reactive sầu Programing nhưng một cách thức lập trình triệu tập vào các luồng tài liệu không đồng điệu cùng quan tiếp giáp sự đổi khác của những luồng dữ liệu ko đồng điệu kia, khi bao gồm sự thay đổi sẽ có được hành động xử lý phù hợp. Vì đó là luồng tài liệu không đồng điệu nên những module code cùng lúc chạy xe trên những thread không giống nhau từ kia rút ngắn thời hạn thực hiện cơ mà không làm cho bloông chồng main thread.

Bạn đang xem: Rxjava & rxandroid

quý khách vẫn xem: Rxjava là gì

II. RxJava

RxJava cơ phiên bản là 1 trong thư viện hỗ trợ các sự kiện không đồng hóa được 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 ko đồng bộ bên trên ngẫu nhiên thread như thế nào, thay đổi dữ liệu cùng sử dụng dữ liệu bằng Obhệ thống. Thỏng viện RxJava cung cấp những nhiều loại Operator tuyệt vời và hoàn hảo nhất nhỏng maps, combine, merge , filter với nhiều máy không giống rất có thể được vận dụng mang lại luồng tài liệu.

III. RxAndroid

RxAndroid được đặc trưng thực hiện mang đến gốc rễ Android được trở nên tân tiến dựa trên RxJava. điều đặc biệt Schedulers được bổ sung mang lại RxAndroid nhằm mục tiêu hỗ trợ mang lại đ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 cho từng module code làm sao cho phù hợp. Một vài ba luồng chạy thịnh hành được áp dụng qua Schedulers.

AndroidSchedulers.mainThread () Cung cung cấp quyền truy cập vào Android Main Thread / UI Thread.Schedulers.newThread () Thread mới sẽ tiến hành tạo thành mọi khi một nhiệm vụ được tạo thành.

IV. Những yếu tố quan trọng đặc biệt trong RxJava:

Về cơ bạn dạng RxJava gồm nhì nhân tố chính: Observable và Obhệ thống. Thêm vào đó, có những sản phẩm khác như Schedulers, Operators cùng Subscription là các thành phần vào vai trò như đa luồng, thao tác làm việc dữ liệu, và liên kết. Chúng ta sẽ thuộc có tác dụng quen với từng thành phần: Observable: Là luồng dữ liệu thực hiện một số các bước cùng phát ra dữ liệu.Observer : Là yếu tố kèm theo luôn luôn phải có của Observable. Nó thừa nhận tài liệu được phạt ra do Observable. Subcription: Là mọt links giữa Observable cùng ObVPS. Có thể có không ít Observer ĐK một Observable tuyệt nhất. Operator: Hỗ trợ cho Việc sửa thay đổi dữ liệu được vạc ra vì chưng Observable trước khi obhệ thống nhấn bọn chúng. Schedulers: Scheduler đưa ra quyết định thread nhưng mà Observable vẫn vạc ra dữ liệu và trên thread nào ObVPS đang dấn dữ liệu.

1. Cách chế tạo Observable

Chúng ta bao gồm 5 một số loại Observable đi kèm là 5 nhiều loại Observer tương ứng. Mỗi một số loại Observable được áp dụng trong các ngôi trường hợp khác nhau phụ thuộc con số cùng các loại phần tử được Observable phạt ra.

Xem thêm: Augmented Product Là Gì ? Định Nghĩa, Ví Dụ, Giải Thích Các Cấp Độ Của Sản Phẩm Là Gì


*

Trước hết bọn họ sẽ điểm qua một vài phương pháp phổ cập để tạo nên Observable:

2. Cách tạo thành Observer

Đối với mỗi một số loại Obhệ thống khác nhau bọn họ có cách chế tạo với thực hiện không giống nhau mà lại phần lớn tương đối đơn giản dễ dàng. Đây là ví dụ nổi bật nhất để tạo nên Observer:

3. Tạo Obhệ thống quan sát và theo dõi Observable

Đây là các cách thức cơ bạn dạng nhằm khiến cho Obhệ thống ĐK quan sát và theo dõi Observable.

animalsObservable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(animalsObserver);subscribeOn(Schedulers.io ()): Báo mang lại Observable chạy trách nhiệm trên một chuỗi nền.observOn(AndroidSchedulers.mainThread ()): Yêu cầu Obhệ thống dấn tài liệu trên luồng chính để bạn có thể tiến hành các hành vi tương quan mang đến đồ họa.

4. Disposable

Disposable được áp dụng để hủy sự liên kết của SubVPS cùng với Subsevable lúc không thể cần thiết việc này siêu hữu dụng nhằm tránh Việc rò rỉ bộ lưu trữ. Khi Observer kết nối được với Observable vào onSubcribe() ta đang nhận được Disposable. Để hủy sự liên kết vào onDestroy() của Activity chúng ta nên được gọi hàm dispose() của Disposable.

5. Operator

RxJava cung ứng tập hòa hợp mập các operator cung ứng mang đến Việc thao tác với dữ liệu vậy bắt buộc operators được phân loại dựa trên các loại các bước bọn chúng làm. lấy một ví dụ như team tạo Observable: create, just, fromArray,... Nhóm lọc dữ liệu: filter, skip, last, take, ... Nhóm sản xuất Observable tự dữ iệu của Observable khác như: buffer, maps, flatmaps,...Lưu ý Lúc sử dụng những Operator thì hiệu quả của Operator trước đang truyền cho Operator sau.Bạn hoàn toàn có thể tìm hiểu thêm tại đây

V. Ví dụ:

Sau đây là ví dụ rõ ràng mang lại từng loại Observable được đề cập phía trên:Trong các ví dụ mình sử dung Custom object Note:

public class cảnh báo int id; String note; // getters an setters

1. Observable và Observer:

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

public class ObserverActivity extends AppCompatActivity private static final String TAG = ObserverActivity.class.getSimpleName(); private Disposable disposable; /** * Simple Observable emitting multiple Notes * - * Observable : Observer */ Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_observer); Observable notesObservable = getNotesObservable(); ObVPS notesObVPS = 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 (chú ý 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, "hotline 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 & SingleObsever

Single luôn luôn phạt ra duy nhất cực hiếm hoặc một lỗi. Observable hoàn toàn có thể triển khai được các bước này nhưng lại Single luôn luôn luôn đảm bảo rằng luôn luôn có một trong những phần tử được trả về. Chính bởi vì chỉ tất cả 1 phần tử nên SingleObserver không có onNext() nhưng chỉ bao gồm onSuccess() để dìm 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 lưu ý * Single Observable is more useful in making network calls * where you expect a single response object to be emitted * - * Single : SingleObVPS */ // TODO - link khổng lồ Retrofit tutorial Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_single_observer); Single noteObservable = getNoteObservable(); SingleObserver singleObserver = 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

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 lớn server lớn update * something where you are not expecting any response but the * success status * - * Completable : CompletableObhệ thống */ // TODO - links to Retrofit tutorial Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_completable_observer); lưu ý note = new Note(1, "Home work!"); Completable completableObservable = updateNote(note); CompletableObVPS completableObserver = completableObserver(); completableObservable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(completableObserver); /** * Assume this making PUT request to lớn server khổng lồ update the Note */ private Completable updateNote(Note 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 áp dụng lúc 1 Observable tạo nên số lượng mập các sự kiện / tài liệu mà ObVPS hoàn toàn có thể cách xử lý. Flowable hoàn toàn có thể được sử dụng lúc nguồn tạo thành 10k+ sự kiện cùng Onserver quan trọng tiêu thú tất cả.Flowable áp dụng phương pháp Backpressure để xử lý tài liệu rời lỗi MissingBackpressureException với OutOfMemoryError.

public class FlowableObserverActivity extends AppCompatActivity private static final String TAG = FlowableObserverActivity.class.getSimpleName(); private Disposable disposable; /** * Simple example of Flowable just to 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 to lớn use Flowable operator * https://github.com/ReactiveX/RxJava/wiki/What%27s-different-in-2.0#when-to-use-flowable * - * Flowable : SingleObVPS */ Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_flowable_observer); Flowable flowableObservable = getFlowableObservable(); SingleObserver obhệ thống = 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