1. Mở đầu.

Bạn đang xem: Android — sự khác biệt giữa eventbus và rxjava là gì?

RxJava có mặt khá lâu và hầu như mọi người đều nghe về khả năng rất tuyệt vời của nó. Họ đã nghe về nó như thế nhưng lại chưa dùng nó. Bạn có phải là một trong số đó không

*
Reactive Extension có sẵn bằng nhiều ngôn ngữ như C++ (RxCpp), C# (Rx.NET), Java (RxJava), Kotlin (RxKotlin) Swift (RxSwift), ...
*
Chúng ta nên đặc biệt quan tâm đến RxJava và RxAndroid đúng không nào.

4. RxJava là gì?

RxJava là một trong những Reactive Extension, dành cho ngôn ngữ Java. Về cơ bản nó là một thư viện follow theo Observer Pattern. Bạn có thể tạo ra bất kì luồng dữ liệu không đồng bộ trên bất kỳ thread nào, chuyển đổi dữ liệu và dữ liệu này được sử dụng bởi Observer trên bất kỳ thread nào. Thư viện này cung cấp nhiều toán tử tuyệt vời như Map, Combine, Merge, Filter, .... có thể áp dụng cho một luồng dữ liệu.

5. RxAndroid là gì?

RxAndroid là một loại Rx dành cho nền tảng Android. Nó được hình thành từ RxJava với vài lớp được thêm vào. Cụ thể hơn, Schedulers được giới thiệu trong RxAndroid (AndroidSchedulers.mainThread()) đóng vai trò quan trọng trong việc hỗ trợ đa luồng trong các ứng dụng Android. Schedulers về cơ bản quyết định.Có rất nhiều loại Schedulers có sẵn nhưng Schedulers.io() và AndroidSchedulers.mainThread() là được dùng nhiều nhất:

Schedulers.io()

Khi dùng cái này thì sẽ không dùng đến CPU, nó thực hiện các công việc chuyên sâu như networks call, đọc đĩa/file, database, … Nó duy trì được pool của thread.

AndroidSchedulers.mainThread()

Nó cung cấp quyền truy cập đến Main Thread/UI Thread. Thông thường cập nhật giao diện hay tương tác với người dùng sẽ xảy ra trên luồng này. Chúng ta không thực hiện bất kì công việc chuyên sâu trên luồng này vì nó sẽ làm cho ứng dụng bị crash hoặc ANR.

Schedulers.newThread()

Sử dụng cái này thì mỗi thread sẽ được tạo ra mỗi lần nhiệm vụ được xếp lịch. Thường thì không khuyến cáo sử dụng cách này trừ khi công việc rất dài. Thread được tạo qua newThread() sẽ không được dùng lại.

Schedulers.computation()

Có thể đòi hỏi đến đòi hỏi nhiều CPU như xử lý dữ liệu lớn, xử lý bitmap, … Số lượng các thread được tạo ra bằng cách sử dụng Scheduler này hoàn toàn phụ thuộc vào số lõi CPU.

Schedulers.single()

Scheduler này sẽ thực hiện tất cả các nhiệm vụ theo thứ tự tuần tự mà chúc được add vào. Việc này có thể cần thiết trong một số trường hợp cần tuần tự.

Schedulers.immediate()

Thực hiện nhiệm vụ ngay lập tức một cách đồng bộ bằng cách chặn main thread.

Schedulers.trampoline()

Nó thực hiện các nhiệm vụ theo Last In - First Out. Tất cả các nhiệm vụ được xếp lịch sẽ được thực hiện từng cái một bằng cách giới hạn số lượng các background thread thành một.

Xem thêm: Bồi Dưỡng Tiếng Anh Là Gì ? Nghĩa Của Từ Tiền Bồi Dưỡng Trong Tiếng Anh

Schedulers.from()

Cách này cho phép tạo ra một Scheduler từ một Executor bởi giới hạn số lượng các thread được tạo ra. Khi thread pool bị full, các nhiệm vụ sẽ xếp hàng đợi.

Chúng ta đã có những khái niệm cơ bản cần thiết. Giờ hãy bắt đầu với một số khái niệm chính về RxJava mà mọi người nên biết.

6. RxJava Basic: Observable, Observer

RxJava gồm hai components chính là Observable và Observer. Thêm vào đó có những thứ khác ta phải quan tâm thêm như Schedulers, Operators and Subscription.

Observable.

Là một luồng dữ liệu (data stream) làm công việc nào đó và phát ra dữ liệu (data)

*

Observer.

Là những đối tượng lắng nghe Observable. Nó nhận dữ liệu từ Observable phát ra.

Subscription.

Sự liên kết giữa Observable và Observer được gọi là Subscription. Có thể có nhiều Observers đăng ký (subscribed) tới chỉ một Observable.

Operator / Transformation

Operator còn có thể gọi là Transformation bởi vì nó là các toán tử có nhiệm vụ biến đổi dữ liệu được phát ra bởi Observable trước khi một Observer nhận chúng (nhận dữ liệu)

Schedulers.

Như đã nói ở trên thì Schedulers là một tên mà có thể quyết định thread mà trên đó Observable sẽ phát ra dữ liệu và trên Observer sẽ nhận được trên background hay main thread, …

7. Tổng kết.

Qua bài viết mình đã tổng hợp một số khái niệm cơ bản liên quan đến RxJava và RxAndroid

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 *