2014-04-04 13 views
43

Tôi là một fan cuồng nhiệt của mở đóng góp nguồn vuông đã làm cho cộng đồng Android và đã nhìn vào những đóng góp mới nhất của họ Otto (xe buýt sự kiện)Otto vs LocalBroadcast:

http://square.github.io/otto/

Đào sâu hơn tôi thấy rằng Otto sử dụng sự phản chiếu và không có phát sóng theo thứ tự (một mẫu mà một thông điệp không được gửi đi từ một người nhận đến người nhận tiếp theo nghe trên cùng một loại sự kiện) Otto tin vào nhiều lửa và quên mô hình.

Bây giờ Android có LocalBroadcastManager (LBM) trong thư viện hỗ trợ v4 của nó, phục vụ cùng một mục đích, mặc dù nó to hơn và có nhiều hạn chế hơn đối với các đối tượng được chuyển. Nhưng ở phía sáng hơn, nó hỗ trợ phát sóng theo thứ tự và nó giống như phát sóng bình thường.

Cả Otto và LBM đều nằm trong cùng một không gian quy trình nên về mặt tốc độ, tôi đoán cả hai sẽ giống nhau. Sự khác biệt thực sự duy nhất tôi có thể thấy là Otto cho phép bạn xác định các sự kiện tùy chỉnh và bạn không phải tuần tự hóa/Ghép các đối tượng.

Do đó câu hỏi thực sự của tôi là khi nào bạn sẽ sử dụng Otto nếu LBM thực hiện những điều tương tự.

Tài liệu tham khảo:

http://nick.perfectedz.com/otto-event-system/

Using Intents or an event bus to communicate within the same app

https://plus.google.com/107049228697365395345/posts/6j4ANWngCUY

Trả lời

36

Nhưng ở phía bên sáng nó hỗ trợ ra lệnh phát sóng

Không có thật không. Không có sendOrderedBroadcast() trên LocalBroadcastManager và mức độ ưu tiên trên IntentFilter dường như không được sử dụng. Nếu bạn có nghĩa là "chương trình phát sóng sẽ được gửi theo thứ tự mà tôi đã đăng ký người nhận", đó có thể là hành vi hiện tại, nhưng không có gì đảm bảo rằng nó sẽ vẫn như vậy.

Cả Otto và LBM là trong không gian quá trình tương tự như vậy trong điều kiện tốc độ tôi đoán cả hai sẽ cùng

Họ sẽ tương tự, mặc dù có thể không giống nhau.

Do đó câu hỏi thực sự của tôi là khi bạn sẽ sử dụng Otto nếu LBM làm những điều tương tự

So sánh hai, Otto có một API sạch, IMHO.

Cá nhân, tôi muốn sử dụng greenrobot's EventBus trên một trong số đó, vì nó cung cấp các mô hình luồng linh hoạt hơn.

+0

Yep Tôi đứng sửa chữa, không có sendOrderedBroadcast() trên LBM, nó cách tôi đăng ký người nhận. Cũng sẽ xem EventBus của greenrobot. Cảm ơn cho các tip – Chris

+0

GreenRobot có vẻ thực sự thú vị đặc biệt là phần dính. Bạn có đề nghị nó được sử dụng để giải quyết vấn đề định hướng thay đổi? Ví dụ để đảm bảo hoạt động sẽ luôn nhận được kết quả từ một dịch vụ sau khi giải trí xong? một ví dụ đơn giản là thêm một cuộc gọi dịch vụ vào hàng đợi bằng cách sử dụng bóng để lấy một số dữ liệu, sau đó tôi xoay thiết bị ... sau đó kết quả từ cú volley được trả về và đăng bằng greenrobot dưới dạng phát quảng cáo cố định, trong khi hoạt động của tôi chưa được tạo (đang khởi động lại) hoạt động khởi động lại và sau đó có thể truy xuất dữ liệu cần thiết. u nghĩ rằng điều này có vẻ hợp pháp? –

+0

@NaderAyyad: Nếu hoạt động sẽ nhận được dữ liệu này từ dịch vụ qua tin nhắn EventBus, thì sự kiện dính có thể hữu ích cho các thay đổi cấu hình. – CommonsWare

5

Cả Otto và LBM đều trong cùng một không gian quy trình nên về tốc độ tôi đoán cả hai sẽ giống nhau.

Tôi đã phát hiện ra rằng việc đăng ký các sự kiện Otto là khá tốn kém, đôi khi phải mất hơn 16 mili giây để đăng ký thuê bao sự kiện (Điều đó có nghĩa bạn thả 1 FPS!). Đó là phần nào dự kiến, như sự kiện đăng ký trong Otto được thực hiện bằng cách phản ánh. Trong khi đối với LBM, chỉ mất vài trăm µs để đăng ký, nhanh hơn 32 lần. (Kết quả từ traceview, Samsung Galaxy S4)

Nhưng tất nhiên, việc sử dụng Otto có thể viết ít mã hơn, có giao dịch tắt.

0
  1. Otto làm cho mã sạch hơn, nhỏ hơn
  2. Otto làm cho thử nghiệm dễ dàng hơn
Các vấn đề liên quan