Rxjava Là Gì

  -  
RxJava, RxAndroid cơ bạn dạng.Quý khách hàng sẽ xem: Rxjava là gì

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

Reactive sầu Programing mà lại một cách thức lập trình sẵn triệu tập vào các luồng dữ liệu không đồng hóa với quan tiền tiếp giáp sự biến hóa của những luồng tài liệu không đồng nhất đó, khi tất cả sự chuyển đổi sẽ có được hành động cách xử lý cân xứng. Vì đấy là luồng tài liệu ko đồng nhất đề nghị những module code đồng thời chạy trên những thread không giống nhau tự đó tinh giảm thời gian tiến hành nhưng ko có tác dụng block main thread.

Bạn đang xem: Rxjava là gì

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

II. RxJava

RxJava cơ bản là một trong những tlỗi viện hỗ trợ các sự khiếu nại ko đồng nhất được cải tiến và phát triển theo ObVPS Pattern. Bạn hoàn toàn có thể sản xuất luồng dữ liệu không đồng hóa bên trên bất kỳ thread nào, biến hóa dữ liệu với áp dụng dữ liệu bởi ObVPS. Thư viện RxJava hỗ trợ nhiều loại Operator tuyệt đối như bản đồ, combine, merge , filter và những vật dụng không giống hoàn toàn có thể được vận dụng mang đến luồng tài liệu.

III. RxAndroid

RxAndroid được đặc trưng áp dụng mang đến nền tảng gốc rễ Android được cải tiến và phát triển dựa vào RxJava. điều đặc biệt Schedulers được bổ sung cập nhật đến RxAndroid nhằm mục đích cung ứng cho đa luồng trong vận dụng Android. Schedulers sẽ giúp các bạn phân chia luồng chạy cho từng module code thế nào cho tương xứng. Một vài luồng chạy phổ biến được sử dụng qua Schedulers.

AndroidSchedulers.mainThread () Cung 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 nên mọi khi một trách nhiệm được chế tạo.

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

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

1. Cách tạo Observable

Chúng ta tất cả 5 một số loại Observable kèm theo là 5 các loại Observer tương xứng. Mỗi loại Observable được sử dụng trong những ngôi trường phù hợp khác nhau dựa vào số lượng và các loại thành phần được Observable phát ra.

Xem thêm: Bộ Lọc Kalman Là Gì - Kalman Filter Và Bài Toán Chuỗi Thời Gian


*

Trước hết họ đang điểm sang một vài phương thức phổ cập để tạo ra Observable:

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

Đối cùng với từng một số loại Observer khác biệt chúng ta có cách sản xuất và triển khai khác biệt dẫu vậy rất nhiều khá đơn giản dễ dàng. Đây là ví dụ điển hình tốt nhất để tạo thành Observer:

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

Đây là các phương thức cơ phiên bản để khiến cho Obhệ thống đă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 Observer dấn dữ liệu bên trên luồng chính để chúng ta cũng có thể triển khai các hành vi tương quan mang lại bối cảnh.

4. Disposable

Disposable được thực hiện nhằm hủy sự liên kết của Subserver cùng với Subsevable khi không còn cần thiết vấn đề này khôn xiết bổ ích nhằm tách Việc nhỉ bộ lưu trữ. lúc ObVPS kết nối được cùng với Observable vào onSubcribe() ta đã nhận ra Disposable. Để hủy sự kết nối trong onDestroy() của Activity các bạn nên người ta gọi hàm dispose() của Disposable.

5. Operator

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

V. Ví dụ:

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

public class chú ý int id; String note; // getters an setters

1. Observable & Observer:

Được sử dụng các độc nhất trong số toàn bộ. Observable hoàn toàn có thể phạt ra không hoặc những 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 : Obhệ thống */ Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_observer); Observable notesObservable = getNotesObservable(); Observer notesObserver = getNotesObserver(); notesObservable.observeOn(Schedulers.io()) .subscribeOn(AndroidSchedulers.mainThread()) .subscribeWith(notesObserver); private ObVPS 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 (cảnh báo 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: Gọi brother!onNext: Watch Narcos tonight!onNext: Pay power bill!onComplete

2. Single và SingleObsever

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

Xem thêm: 3 Bí Quyết Tiết Kiệm Cho Con Bố Mẹ Nào Cũng Có Thể Làm Được, Tiết Kiệm Tình Yêu Cho Con

public class SingleObserverActivity extends AppCompatActivity private static final String TAG = SingleObserverActivity.class.getSimpleName(); private Disposable disposable; /** * Single Observable emitting single chú ý * Single Observable is more useful in making network calls * where you expect a single response object to be emitted * - * Single : SingleObhệ thống */ // TODO - links lớn Retrofit tutorial Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_single_observer); Single noteObservable = getNoteObservable(); SingleObhệ thống singleObserver = getSingleObserver(); noteObservable .observeOn(Schedulers.io()) .subscribeOn(AndroidSchedulers.mainThread()) .subscribe(singleObserver); private SingleObVPS 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 chú ý 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 item, instead it returns * Success or failure state * Consider an example of making a PUT request to lớn hệ thống khổng lồ update * something where you are not expecting any response but the * success status * - * Completable : CompletableObVPS */ // TODO - link lớn Retrofit tutorial Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_completable_observer); Note note = new Note(1, "Home work!"); Completable completableObservable = updateNote(note); CompletableObVPS completableObhệ thống = completableObserver(); completableObservable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(completableObserver); /** * Assume this making PUT request to lớn server to update the cảnh báo */ private Completable updateNote(chú ý 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: cảnh báo updated successfully!

5. Flowable và Observer

Được áp dụng lúc một Observable tạo ra con số to những sự khiếu nại / tài liệu cơ mà ObVPS có thể giải pháp xử lý. Flowable hoàn toàn có thể được áp dụng Khi nguồn tạo ra 10k+ sự khiếu nại với Onhệ thống quan yếu tiêu thú tất cả.Flowable sử dụng cách thức Backpressure để giải pháp xử lý tài liệu tránh 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 links 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 : SingleObserver */ 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