EventBus đã được giới thiệu trong Google IO 2013
Và được áp dụng vào Android kể từ đó.Thuật nghữ và cách thức hoạt động của EventBus đã được áp dụng trước đó rất lâu không chỉ trên riêng ngôn ngữ Java.
EventBus giúp điều phối các sự kiện tránh hệ thống quá tải khi sử lý nhiều sự kiện và quản lý chúng.
EventBus Git
Các ưu điểm khi sử dụng EventBus
- Tốc độ truyền nhanh hơn và cách viết đơn giản hơn khi sủ dụng Intent.
- Eventbus tối ưu hóa và đơn giản hóa các event cũng như trao đổi dữ liệu giữa các Activity, Fragment, Service, Theards….. với nhau.
- Bắt sự kiện và lấy kết quả của quá trình đó tại bất kì đâu Activity, Fragments…..
- Tránh được tình trạng Overload Thread, tràn bộ nhớ đệm, thiếu bộ nhớ dẫn đến giảm hiệu suất của chương trình khi có quá nhiều even trao đổi dữ liệu cùng diễn ra. Lúc này Eventbus điều phối các hoạt động này giúp các hoạt động được sắp xếp hợp lý và việc trao đổi dữ liệu trở lên dễ dạng dựa vào các đăng ký hoạt động (subscribers event)
Lưu ý EventBus có 4 kiểu gửi sự kiện:
– PostThread : đây là kiểu mặc định, đơn giản khi gửi sự kiện. Và nó không cần thiết chạy trên một Main Thread.
– MainThread: sự kiện sẽ được gọi từ Android’s main thread. Và sẽ được gọi một cách trực tiếp
– BackgroundThread: sư kiện sẽ được gọi trong background thread. và nó sẽ được gọi trực tiếp ở nơi tạo sự kiện. và EventBus chỉ sử dụng 1 background thread để xử lý
– Async: sự kiện này luôn độc lập với main thread. Vì thế tránh sử dụng nhiều cùng 1 lúc.EventBus cũng sử dụng 1 thread pool để có thể tái sử dụng lại
Thêm EventBus vào project:
compile 'org.greenrobot:eventbus:3.0.0'
Bắt đầu với 1 ví dụ đơn giản sau trong 3 bước:
B1: Định nghĩa một sự kiện như sau:
public class MessageEvent { public final String message; public MessageEvent(String message) { this.message = message; } }
B2: Tạo một subscribers ở Activity mà bạn muốn lắng nghe
@Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) { Toast.makeText(this, event.message, Toast.LENGTH_SHORT).show(); }
Tiến hành Đăng ký lắng nghe sự kiện và hủy đăng ký.
@Override public void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override public void onStop() { EventBus.getDefault().unregister(this); super.onStop(); }
B3: Post Events
EventBus.getDefault().post(new MessageEvent(items[position]));
Để tìm hiểu sâu hơn về nó chúng ta xem tại đây.