Rxjava là gì

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 Programing nhưng một phương thức xây dựng tập trung vào những luồng tài liệu không đồng nhất cùng quan gần cạnh sự biến đổi của những luồng tài liệu ko đồng bộ kia, lúc tất cả sự biến hóa sẽ có được hành động giải pháp xử lý phù hợp. Vì đấy là luồng dữ liệu ko đồng điệu yêu cầu các module code cùng lúc chạy xe trên những thread không giống nhau trường đoản cú đó rút ngắn thời hạn xúc tiến nhưng không có tác dụng bloông chồng main thread.

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

II. RxJava

RxJava cơ bạn dạng là 1 tlỗi viện hỗ trợ những sự kiện ko nhất quán được cách tân và phát triển theo Observer Pattern. quý khách rất có thể tạo luồng tài liệu ko đồng bộ trên ngẫu nhiên thread nào, đổi khác tài liệu và thực hiện dữ liệu bằng Obhệ thống. Thư viện RxJava cung cấp nhiều một số loại Operator tuyệt vời nhất nlỗi maps, combine, merge , filter và nhiều thiết bị khác hoàn toàn có thể được vận dụng cho luồng dữ liệu.

III. RxAndroid

RxAndroid được đặc biệt quan trọng thực hiện cho căn nguyên Android được cải tiến và phát triển dựa trên RxJava. Đặc biệt Schedulers được bổ sung cập nhật mang đến RxAndroid nhằm cung cấp mang đến nhiều luồng vào vận 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 luồng chạy thịnh hành được thực hiện qua Schedulers.

AndroidSchedulers.mainThread () Cung cung cấp quyền truy cập vào Android Main Thread / UI Thread.Schedulers.newThread () Thread bắt đầu sẽ được tạo ra mọi khi một trách nhiệm được tạo.

IV. Những nhân tố đặc biệt quan trọng vào RxJava:

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

1. Cách tạo nên Observable

Chúng ta bao gồm 5 loại Observable kèm theo là 5 một số loại Observer tương xứng. Mỗi các loại Observable được áp dụng trong các trường thích hợp khác biệt phụ thuộc vào số lượng cùng nhiều loại bộ phận được Observable phát ra.

*

Trước tiên họ đang điểm sang một vài ba phương thức phổ cập nhằm tạo nên Observable:

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

Đối cùng với mỗi loại Observer không giống nhau bọn họ có giải pháp tạo nên và xúc tiến không giống nhau nhưng hầu như khá đơn giản. Đây là ví dụ nổi bật độc nhất để tạo ra Observer:

private ObVPS getAnimalsObserver() return new Observer() Override public void onComplete() Log.d(TAG, "All items are emitted!"); ; onSubscribe(): Phương thức sẽ tiến hành Hotline khi 1 ObVPS ĐK vào Observable. onNext(): Phương thơm thức này sẽ được Hotline khi Observable bước đầu phạt ra dữ liệu. onError(): Trong trường đúng theo có lỗi, cách tiến hành onError() sẽ tiến hành điện thoại tư vấn.onComplete(): khi một Observable hoàn thành Việc phạt ra tài liệu, onComplete() sẽ được Hotline.

Xem thêm: Any, Eny, Ay, Ey, Aye Là Gì ? (Từ Điển Anh Nghĩa Của Từ Aye, Từ Aye Là Gì

3. Tạo Observer theo dõi Observable

Đây là những cách làm cơ bạn dạng nhằm làm cho ObVPS đăng ký theo dõi Observable.

animalsObservable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(animalsObserver);subscribeOn(Schedulers.io ()): Báo mang lại Observable chạy nhiệm vụ bên trên một chuỗi nền.observOn(AndroidSchedulers.mainThread ()): Yêu cầu Observer dìm dữ liệu trên luồng thiết yếu để chúng ta cũng có thể tiến hành những hành vi tương quan mang lại giao diện.

4. Disposable

Disposable được thực hiện để bỏ sự kết nối của Subhệ thống với Subsevable lúc không còn cần thiết bài toán này cực kỳ có ích nhằm tách việc thất thoát bộ nhớ. Khi Obhệ thống liên kết được cùng với Observable vào onSubcribe() ta sẽ nhận ra Disposable. Để hủy sự liên kết trong onDestroy() của Activity bạn nên được gọi hàm dispose() của Disposable.

5. Operator

RxJava cung cấp tập đúng theo Khủng các operator cung ứng mang đến câu hỏi làm việc cùng với dữ liệu vậy đề nghị operators được phân loại dựa vào nhiều loại các bước bọn chúng làm. lấy ví dụ như như nhóm chế tạo ra Observable: create, just, fromArray,... Nhóm lọc dữ liệu: filter, skip, last, take, ... Nhóm sinh sản Observable trường đoản cú dữ iệu của Observable không giống như: buffer, map, flatbản đồ,...Lưu ý khi sử dụng nhiều Operator thì kết quả của Operator trước vẫn truyền mang đến Operator sau.Quý Khách hoàn toàn có thể xem thêm trên đây

V. Ví dụ:

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

public class Note int id; String note; // getters an setters

1. Observable và Observer:

Được thực hiện nhiều tốt nhất trong các toàn bộ. Observable hoàn toàn có thể phát ra không hoặc nhiều phần tử.

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 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 (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 và SingleObsever

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

public class SingleObserverActivity extends AppCompatActivity private static final String TAG = SingleObserverActivity.class.getSimpleName(); private Disposable disposable; /** * Single Observable emitting single cảnh báo * Single Observable is more useful in making network calls * where you expect a single response object to be emitted * - * Single : SingleObserver */ // TODO - links to Retrofit tutorial Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_single_observer); Single noteObservable = getNoteObservable(); SingleObVPS singleObVPS = 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 có thể hoặc ko vạc ra một quý hiếm. Maybe được sử dụng khi bạn sẽ ước ao ngóng một phần tử được vạc ra tùy thuộc vào từng trường thích hợp xảy ra. Nhỏng khi bọn họ query note by Id trong database nó rất có thể bao gồm hoặc cũng hoàn toàn có thể ko.

Xem thêm: Riot Là Gì ? Riot In Vietnamese

public class CompletableObserverActivity extends AppCompatActivity { private static final String TAG = CompletableObserverActivity.class.getSimpleName(); private Disposable disposable; /** * Completable won"t emit any thành công, instead it returns * Success or failure state * Consider an example of making a PUT request khổng lồ VPS khổng lồ update * something where you are not expecting any response but the * success status * - * Completable : CompletableObhệ thống */ // TODO - link to lớn Retrofit tutorial Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_completable_observer); Note note = new Note(1, "trang chủ work!"); Completable completableObservable = updateNote(note); CompletableObserver completableObserver = completableObserver(); completableObservable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(completableObserver); /** * Assume this making PUT request lớn VPS to lớn update the Note */ 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: lưu ý updated successfully!

5. Flowable & Observer

Được thực hiện khi một Observable tạo ra con số to các sự kiện / dữ liệu mà lại ObVPS hoàn toàn có thể xử lý. Flowable hoàn toàn có thể được sử dụng khi nguồn tạo ra 10k+ sự kiện với OnVPS bắt buộc tiêu thụ toàn bộ.Flowable áp dụng phương thức Backpressure để xử trí tài liệu tránh lỗi MissingBackpressureException cùng 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 lớn 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 : SingleObhệ thống */ Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_flowable_observer); Flowable flowableObservable = getFlowableObservable(); SingleObVPS observer = 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: Hỏi Đáp