- vừa được xem lúc

Tìm hiểu Các kiến thức cơ bản về Rxjava

0 0 199

Người đăng: Phung Tuan ANh

Theo Viblo Asia

1. Rx là gì ?:

  • Rx là một api cho lập trình không đồng bộ với các luồng có thể quan sát được

  • Rx là sự kết hợp của những ý tưởng tốt nhất về Observer pattern , Iterator pattern và functional programming

  • Rxjava là một thư viện để soạn các chương trình không đồng bộ được phát triển theo Observer Pattern

  • Để sử dụng được Rxjava 3 chúng ta thêm vào Gradle :

    dependencies { implementation 'io.reactivex.rxjava3:rxjava:3.0.13' }

2. Các thành phần chính của rxjava

  • RxJava gồm hai components chính là Observable và Observer. Thêm vào đó có những thành phần khác như Schedulers, Operators and Subscribe.

  • 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) Hoạt động của observerable

  • Ví dụ một số cách tạo một Observable :

+ private Observable<String> observable = Observable.just("Ha Noi", "Tp Ho Chi Minh"); + private Observable<String> observableTime = Observable.create(emitter -> {<br/> while (!emitter.isDisposed()) { long time = System.currentTimeMillis(); emitter.onNext("" + time); if (time % 2 != 0) { emitter.onError(new IllegalStateException("Odd millisecond!"));<br/> break; } } });
  • Observer : Lắng nghe dữ liệu được phát ra từ Observable
    • Các phương thức cần quan tâm khi lắng nghe dữ liệu từ Observable

      . onNext() : phương thức này được gọi khi một item mới được phát ra bởi Observable.

      . onError() : phương pháp này được gọi khi có lỗi xảy ra và việc phát dữ liệu không thành công.

      . onComplete() : phương thức này được gọi khi Observable đã hoàn thành việc phát tất cả các mục thành công.

      • Ví dụ taọ một Observer
private Observer<String> observer = new Observer<String>() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull String s) { } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } };
  • Schdulers : Schedulers quyết định thread mà trên đó Observable sẽ phát ra dữ liệu và trên Observer sẽ nhận được dữ liệu

    • Schedulers.computation(): Thường được dùng cho công việc tính toán
    • Schedulers.io(): Thực hiện cho các công việc liên quan đến network, database
    • Schedulers.single(): Scheduler này sẽ thực hiện tất cả các nhiệm vụ theo thứ tự tuần tự
    • Schedulers.trampoline(): Công việc được thực hiện một cách tuần tự và thường được sử dụng cho mục đích thử nghiệm.
  • Subscribe : Cầu nối giữa Observable và Observe . Có thể có nhiều Observer đăng ký tới một Observable

3. Một số operator thường dùng

  • FlatMap : biến đổi danh sách những items từ Observable vào Observables khác.
Ex : Observable.just("Ha Noi").flatMap(str -> { return Observable.just(str + "+", str + "++", str + "+++"); }).subscribe(System.out::println); KQ : Ha Noi+ Ha Noi++ Ha Noi+++
  • Map : Map sẽ chuyển đổi các item được phát ra bởi 1 Observable bằng cách áp dụng mỗi hàm cho mỗi item, dễ hiểu hơn thì nó dùng để chuyển đối 1 item thành 1 item khác.
Ex : Observable.just("Ha Noi").map(str -> str + "la thu do cua Viet Nam") .subscribe(System.out::println); KQ : Ha Noi la thu do cua Viet Nam
  • Filter : Filter trả ra những items thoả mãn với điều kiện kiểm tra.

    Ex : Observable.just("Ha Noi", "Da Nang", "Tp Ho Chi Minh")
    .filter(item -> item.toLowerCase().contains("p"))
    .subscribe(System.out::println);

    KQ : Tp Ho Chi Minh

  • Merge :Hàm merge trong RxJava giúp chúng ta thực hiện đồng thời nhiều Observable và trả về riêng lẻ các kết quả của Observable sau khi thực hiện xong Observable đó.

    Ex : private Observable<String> observable = Observable.just("a", "b", "c", "d", "e", "f"); private Observable<String> observableNumber = Observable.just("3","4","5","6"); Observable.merge(observable,observableNumber).subscribe(System.out::println);

 KQ : 2021-06-04 16:04:35.053 6524-6524/com.example.rx I/System.out: a 2021-06-04 16:04:35.053 6524-6524/com.example.rx I/System.out: b 2021-06-04 16:04:35.053 6524-6524/com.example.rx I/System.out: c 2021-06-04 16:04:35.053 6524-6524/com.example.rx I/System.out: d 2021-06-04 16:04:35.053 6524-6524/com.example.rx I/System.out: e 2021-06-04 16:04:35.053 6524-6524/com.example.rx I/System.out: f 2021-06-04 16:04:35.053 6524-6524/com.example.rx I/System.out: 3 2021-06-04 16:04:35.053 6524-6524/com.example.rx I/System.out: 4 2021-06-04 16:04:35.053 6524-6524/com.example.rx I/System.out: 5 2021-06-04 16:04:35.053 6524-6524/com.example.rx I/System.out: 6
  • Zip: Zip trong RxJava giúp bạn thực hiện đồng thời nhiều Observable và gộp các kết quả của các Observable lại trong một kết quả trả về. Ex : private Observable<Integer> observableInter = Observable.just(3, 4, 5, 6);
    private Observable<String> observable = Observable.just("a", "b", "c", "d", "e", "f");
 Observable.zip(observable, observableInter, (s, integer) -> s +integer).subscribe(System.out::println);
KQ : 2021-06-04 16:04:35.054 6524-6524/com.example.rx I/System.out: a3<br/> 2021-06-04 16:04:35.054 6524-6524/com.example.rx I/System.out: b4<br> 2021-06-04 16:04:35.054 6524-6524/com.example.rx I/System.out: c5<br> 2021-06-04 16:04:35.054 6524-6524/com.example.rx I/System.out: d6<br/>
  1. Reference

    Vì nội dung tìm hiểu khá nhiều nên mình sẽ chia làm 2 phần. Phần 1 mình xin tạm dừng tại đây. Mong nhận được sự đóng góp từ mọi người!!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 1: Làm quen cô nàng Flutter

Lời mở đầu. Gần đây, Flutter nổi lên và được Google PR như một xu thế của lập trình di động vậy.

0 0 254

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 3: Lột trần cô nàng Flutter, BuildContext là gì?

Lời mở đầu. Màn làm quen cô nàng FLutter ở Phần 1 đã gieo rắc vào đầu chúng ta quá nhiều điều bí ẩn về nàng Flutter.

0 0 189

- vừa được xem lúc

[Android] Hiển thị Activity trên màn hình khóa - Show Activity over lock screen

Xin chào các bạn, Hôm nay là 30 tết rồi, ngồi ngắm trời chờ đón giao thừa, trong lúc rảnh rỗi mình quyết định ngồi viết bài sau 1 thời gian vắng bóng. .

0 0 93

- vừa được xem lúc

Tìm hiểu Proguard trong Android

1. Proguard là gì . Cụ thể nó giúp ứng dụng của chúng ta:. .

0 0 83

- vừa được xem lúc

Làm ứng dụng học toán đơn giản với React Native - Phần 6

Chào các bạn một năm mới an khang thịnh vượng, dồi dào sức khỏe. Lại là mình đây Đây là link app mà các bạn đang theo dõi :3 https://play.google.com/store/apps/details?id=com.

0 0 51

- vừa được xem lúc

20 Plugin hữu ích cho Android Studio

1. CodeGlance. Plugin này sẽ nhúng một minimap vào editor cùng với thanh cuộn cũng khá là lớn. Nó sẽ giúp chúng ta xem trước bộ khung của code và cho phép điều hướng đến đoạn code mà ta mong muốn một cách nhanh chóng.

0 0 301