2015-05-10 21 views
11

Tôi đã sử dụng Event Bus trong ứng dụng của mình (ví dụ: greenrobot/EventBus). Nhưng tôi tìm thấy một số nhược điểm trong việc sử dụng tổ chức sự kiện Xe buýt:Ưu và nhược điểm của Android: Xe buýt sự kiện và RxJava

  • Chaining nhiệm vụ thực hiện rất khó
  • Rất nhiều các lớp học để đại diện cho các sự kiện
  • Ít mã rõ ràng (tốt, nó vẫn có thể theo dõi, nhưng không phải là rõ ràng)

Tôi đã nghiên cứu các kỹ thuật mới để giải quyết vấn đề này. Và tôi đọc khá nhiều về RxJava và tự hỏi liệu nó có thể là một giải pháp hay không.

Vì vậy, câu hỏi của tôi về RxJava (dựa trên những gì tôi đã đọc gần đây):

  • RxJava người quan sát có thể được đăng ký bất cứ lúc nào? Vì vậy, không chỉ khi tạo Observable. Với EventBus điều này là có thể, tôi có thể đăng ký bất cứ lúc nào, không chỉ khi Observable được tạo ra.
  • Làm cách nào để xử lý hai hoặc nhiều nhà xuất bản xuất bản cùng một loại sự kiện (ví dụ: sự kiện điều hướng)?
  • Ghép nối chặt chẽ (các) nhà xuất bản và người đăng ký, có nghĩa là tôi phải chỉ định rõ ràng (các) nhà xuất bản mỗi lần. Vì vậy, tôi phải lo lắng không chỉ với các loại sự kiện, mà còn là người khởi tạo. Với EventBus, tôi chỉ cần lo lắng về loại sự kiện và không phải là người khởi tạo.

Trả lời

8

1) Khi bạn có thể hiện của một Đài quan sát, bạn có thể đăng ký nó bất kỳ lúc nào và từ bất kỳ chuỗi nào, thậm chí đồng thời.

2) Chúng tôi thường hợp nhất các dòng của nhiều quan sát qua Observable.merge() hoặc sử dụng một PublishSubject được tuần tự hóa.

3) Nếu bạn quan sát thấy có thể quan sát được, có thể có hàng tá toán tử và nguồn liên quan, nhưng bạn sẽ nhận được một chuỗi giá trị tuần tự bất kể là gì. Bạn chỉ cần nắm giữ một Observable đại diện cho một số nguồn sự kiện và người quan sát không cần biết sự kiện đã được sáp nhập, lọc, thực hiện một vòng qua mạng và bị trì hoãn trước khi đến phương thức onNext() của bạn. Bạn có thể tự nhiên thực hiện hoặc sử dụng một số dịch vụ tra cứu sẽ giúp bạn có được một Observable để giảm khớp nối, nhưng với RxJava, việc ghép nối thường không phải là một vấn đề.

Các vấn đề liên quan