Rxjava là gì

RxJava, RxAndroid cơ bản.quý khách đã xem: Rxjava là gì

I. Reactive Programming là gì?

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

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

Quý Khách đang xem: Rxjava là gìQuý khách hàng đang xem: Rxjava là gì

II. RxJava

RxJava cơ phiên bản là 1 trong những tlỗi viện hỗ trợ những sự khiếu nại không đồng nhất được trở nên tân tiến theo ObVPS Pattern. Quý khách hàng rất có thể tạo ra luồng dữ liệu không đồng hóa bên trên bất kỳ thread làm sao, đổi khác dữ liệu với thực hiện tài liệu bằng ObVPS. Tlỗi viện RxJava hỗ trợ nhiều các loại Operator hoàn hảo nhất như bản đồ, combine, merge , filter cùng những sản phẩm khác rất có thể được vận dụng đến luồng dữ liệu.

III. RxAndroid

RxAndroid được quan trọng đặc biệt thực hiện mang đến nền tảng gốc rễ Android được trở nên tân tiến dựa trên RxJava. Đặc biệt Schedulers được bổ sung mang lại RxAndroid nhằm cung cấp mang đến đa luồng vào vận dụng Android. Schedulers để giúp bạn phân chia luồng chạy mang lại từng module code làm sao cho phù hợp. Một vài luồng chạy thịnh hành được áp 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 new sẽ tiến hành tạo ra mỗi lúc một nhiệm vụ được sản xuất.

IV. Những nguyên tố đặc biệt vào RxJava:

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

Xem thêm: Gia Thế "Khủng" Của Chồng Hoa Hậu Jennifer Phạm Lần Đầu Khoe Con Gái Thứ Tư

1. Cách chế tạo ra Observable

*

Trước hết chúng ta đang điểm qua 1 vài cách thức thông dụng nhằm tạo thành Observable:

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

Đối cùng với mỗi loại Obhệ thống không giống nhau chúng ta bao gồm bí quyết sản xuất với thực thi không giống nhau dẫu vậy các tương đối đơn giản dễ dàng. Đây là ví dụ điển hình nổi bật duy nhất để tạo ra Observer:

3. Tạo ObVPS theo dõi Observable

Đây là những cách tiến hành cơ bạn dạng nhằm khiến cho Obhệ thống đăng ký theo dõi Observable.

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

4. Disposable

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

5. Operator

RxJava cung cấp tập hòa hợp mập những operator hỗ trợ mang đến câu hỏi thao tác làm việc với tài liệu vậy bắt buộc operators được phân loại dựa trên các loại công việc bọn chúng làm cho. ví dụ như như nhóm tạo nên Observable: create, just, fromArray,... Nhóm lọc dữ liệu: filter, skip, last, take, ... Nhóm tạo thành Observable từ dữ iệu của Observable không giống như: buffer, maps, flatmaps,...Lưu ý khi thực hiện những Operator thì công dụng của Operator trước đang truyền mang lại Operator sau.Quý khách hàng rất 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 các loại Observable được nhắc phía trên:Trong các ví dụ bản thân sử dung Custom object Note:

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

1. Observable & Observer:

Được sử dụng những tuyệt nhất trong số toàn bộ. Observable 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(); Observer notesObhệ thống = getNotesObserver(); notesObservable.observeOn(Schedulers.io()) .subscribeOn(AndroidSchedulers.mainThread()) .subscribeWith(notesObserver); private Observer 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 (lưu ý 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:

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 lớn be emitted * - * Single : SingleObVPS */ // 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 singleObVPS = getSingleObserver(); noteObservable .observeOn(Schedulers.io()) .subscribeOn(AndroidSchedulers.mainThread()) .subscribe(singleObserver); private SingleObserver 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 Note 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 thành quả, instead it returns * Success or failure state * Consider an example of making a PUT request khổng lồ server khổng lồ update * something where you are not expecting any response but the * success status * - * Completable : CompletableObhệ thống */ // TODO - links khổng lồ 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); CompletableObhệ thống completableObserver = completableObserver(); completableObservable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(completableObserver); /** * Assume this making PUT request lớn 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 CompletableObserver completableObserver() { return new CompletableObserver() Override protected void onDestroy() super.onDestroy(); disposable.dispose(); Output

onSubscribeonComplete: lưu ý updated successfully!

5. Flowable và Observer

Được thực hiện lúc 1 Observable tạo nên con số lớn các sự khiếu nại / dữ liệu mà lại Obhệ thống rất có thể xử lý. Flowable có thể được sử dụng Khi nguồn tạo thành 10k+ sự kiện và Onserver quan yếu tiêu thú tất cả.Flowable sử dụng phương thức Backpressure để xử lý dữ liệu rời 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 lớn show the syntax * the use of Flowable is best explained when used with BackPressure * Read the below link 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 : SingleObserver */ Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_flowable_observer); Flowable flowableObservable = getFlowableObservable(); SingleObserver 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 SingleObserver 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

| W88Vuive