程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> EventBus,eventbus使用

EventBus,eventbus使用

編輯:關於PHP編程

EventBus,eventbus使用


1、簡介
  EventBus是一個Android端優化的publish/subscribe消息總線,簡化了應用程序內各組件間、組件與後台線程間的通信。比如請求網絡,等網絡返回時通過Handler或Broadcast通知UI,兩個Fragment之間需要通過Listener通信,這些需求都可以通過EventBus實現。
eventbus原理框圖.png

 


2、下載地址
https://github.com/greenrobot/EventBus


3使用步驟
1)添加jar包到libs文件夾下

2)注冊
EventBus.getDefault().register(this);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    EventBus.getDefault().register(this);
}

3)解注冊
EventBus.getDefault().unregister(this);

@Override
protected void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);
}

4)構造發送消息類

public class MessageEvent {
    public String name;
    public String password;

    public MessageEvent(String name, String password) {
        this.name = name;
        this.password = password;
    }
}

5)發布消息
EventBus.getDefault().post(new MessageEvent("dahaige","123456"));
6)接收消息
ThreadMode.MAIN 表示這個方法在主線程中執行
ThreadMode.BACKGROUND 表示該方法在後台執行,不能並發處理
ThreadMode.ASYNC 也表示在後台執行,可以異步並發處理。
ThreadMode.POSTING 表示該方法和消息發送方在同一個線程中執行

@Subscribe(threadMode = ThreadMode.MAIN)
public void messageEventBus(MessageEvent event){
	tv_result.setText("name:"+event.name+" passwrod:"+event.password);
}


4、粘性事件
之前說的使用方法, 都是需要先注冊(register), 再post,才能接受到事件;
如果你使用postSticky發送事件, 那麼可以不需要先注冊, 也能接受到事件.
1)構造發送信息類

public class StickyEvent {
    public String msg;

    public StickyEvent(String msg) {
        this.msg = msg;
    }
}


2)發布消息
EventBus.getDefault().postSticky(new StickyEvent("我是粘性事件"));
3)接收消息

//注意,和之前的方法一樣,只是多了一個 sticky = true 的屬性.
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void onEvent(StickyEvent event){
	tv_c_result.setText(event.msg);
}

4)注冊
EventBus.getDefault().register(CActivity.this);

 // 接收粘性事件數據按鈕的點擊事件處理
bt_eventbus_send_sticky.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
		if(isFirstFlag) {
			isFirstFlag = false;
			// 4 注冊
			EventBus.getDefault().register(EventBusSendActivity.this);
		}
	}
});


5)解注冊

EventBus.getDefault().removeAllStickyEvents();
EventBus.getDefault().unregister(CActivity.class);

  


5、例子
1)主線程發送消息
2)發送粘性事件

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved