EventBus是一個訂閱/發布消息總線,實現在應用程序里面,組件之間,線程之間的通信。因為event是任意的類型,所以這個使用起來非常方便。
eventbus中的角色:
event:當然就是事件啦
subscriber:事件的訂閱者,先注冊,接收特定的對象,並通過onEventXXX()來回收處理事件。
Publisher:事件的發布者,通過post發布信息。
處理過程主要分為5步:
1.定義一個事件(event)
2.注冊一個訂閱者
3.發布一個事件
4.接收處理一個事件
5.注銷一個訂閱者
四種處理事件的方式onEventXXXX
onEvent函數一共有四種,前面的例子只用到一個onEvent。
函數名 | 含義 | ThreadMode |
---|---|---|
onEvent | 事件處理在事件發送的那個線程執行 | PostThread |
onEventMainThread | 事件在主線程-UI線程執行 | MainThread |
onEventBackgroundThread | 事件在一個后台線程執行(就一個后台線程) | BackgroundThread |
onEventAsync | 事件會單獨啟動一個線程執行(每個事件都會啟動一個線程) | Async |
其中前三個事件處理方式,都應該盡快完成。
在as下的代碼示例
改module下的在build.gradle 文件里面,dependencies目錄下添加這一句話
compile 'de.greenrobot:eventbus:2.4.0'
在連網的情況下,build工程,as會自動去網上下載相應的jar包。build結束后就可以編程了。
1.定義event。在FirstEvent.java中的代碼如下
1 public class FirstEvent { 2 3 private String msg; 4 public FirstEvent(String str){ 5 msg = str; 6 } 7 8 public String getMsg(){ 9 return msg; 10 } 11 }
2.注冊一個訂閱者,在MainActivity.java 中的onCreate()方法中加入如下代碼
1 EventBus.getDefault().register(this);
3.發布一個事件。在SecondActivity中發布一個事件,當點擊button后發布事件,代碼如下
1 protected void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 setContentView(R.layout.activity_second); 4 5 btn = (Button)findViewById(R.id.second_btn); 6 btn.setOnClickListener(new View.OnClickListener() { 7 @Override 8 public void onClick(View v) { 9 10 //發布一個事件 11 EventBus.getDefault().post(new FirstEvent("this is an event. ")); 12 } 13 });
4.接收並處理一個事件,在MainActivity中處理改事件,添加如下代碼。
1 public void onEventMainThrend(FirstEvent event){ 2 String str = "this is in main activity , "+event.getMsg(); 3 4 Log.d("yuqt",str); 5 tv.setText(str); 6 Toast.makeText(this,str,Toast.LENGTH_LONG).show(); 7 }
5.注銷事件,在onDestroy()中進行注銷。
1 protected void onDestroy() { 2 super.onDestroy(); 3 EventBus.getDefault().unregister(this); 4 }
完成。