Tôi tìm thấy một vài bài báo nói về cách RxJava/RxAndroid có thể thay thế bus sự kiện (chẳng hạn như otto)RxAndroid, xe buýt sự kiện và hoạt động vòng đời
- https://lorentzos.com/rxjava-as-event-bus-the-right-way-10a36bdd49ba#.7a4619qva
- https://medium.com/mobiwise-blog/use-rxjava-instead-of-event-bus-libraries-aa78b5023097#.ew28h2urf
Một câu nói từ bài viết đầu tiên:
Otto từ Square chính thức nhận không được dùng các ngày trước đó. Trong thế giới Android, chúng ta có thể cổ vũ một cái gì đó giống như "EventBusses đã chết RxJava sống lâu".
Có một điều tôi đang mất tích mặc dù:
Một trong những đặc quyền của xe buýt sự kiện là họ giúp đỡ rất nhiều với vòng đời hoạt động trong đó bạn không cần phải quản lý đăng ký/unregistering để callbacks bằng tay (và do đó tránh rò rỉ bộ nhớ một cách dễ dàng)
Ví dụ dòng chảy:
- Hoạt động đăng ký vào một sự kiện để nhận bài hát (nói SongsAvailableEvent)
- Chúng tôi yêu cầu bài hát (chúng tôi thực hiện một yêu cầu mạng)
- Chúng tôi thay đổi định hướng giữa yêu cầu của thiết bị
- Activity chết và một cái mới được xây dựng, mà cũng được đăng ký với SongsAvailableEvent
- Các hoạt động mới được sự kiện và cập nhật giao diện người dùng và Hoạt động cũ (hiện đã chết) không nhận được sự kiện (yay!)
Các bài viết ở trên trông giống như dòng này được "giải quyết" bởi RxAndroid/RxJava, nhưng bằng cách sử dụng Rx bạn vẫn cần phải đăng ký/hủy đăng ký trên một Observable bằng tay khi bạn thay đổi hướng của thiết bị. Hơn nữa, nếu tôi muốn "tái sử dụng" yêu cầu được thực hiện trong một Observable, tôi cần phải bằng cách nào đó vẫn tồn tại nó để tôi sẽ đăng ký trên cùng một Observable trong Activity mới (tôi không chắc chắn làm thế nào để làm điều đó, nhưng nó là không phải là điểm :)).
Câu hỏi của tôi là: vấn đề này có dễ giải quyết được với RxAndroid/RxJava thuần túy hay tôi vẫn cần sử dụng Rx với xe buýt sự kiện/mở rộng Rx sử dụng thứ gì đó như RxLifecycle (điều này làm phức tạp mọi thứ vì tôi không quản lý Quan sát của mình lớp trình bày)?
Tôi không muốn hủy đăng ký theo cách thủ công, đó là lỗi dễ xảy ra. Với otto, tôi có thể đặt unregister (this) trong lớp cơ sở của Activity, và chúng ta đã xong, nhưng sử dụng Rx tôi cần theo dõi trên Observables của mình. Đối với Trình tải, chúng tuyệt vời cho các tập dữ liệu, nhưng chúng là một biến chứng quá mức đối với một số yêu cầu – dors