Sử dụng EventBus trong 3 bước đơn giản

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.

Source Demo

 

Nguyễn Linh

Chia sẻ để cùng tiến bộ...