歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android事件總線

Android事件總線

日期:2017/3/1 9:11:35   编辑:Linux編程

Android中Activity、Service、Fragment之間的相互通信比較麻煩,主要有以下一些方法:

(1)使用廣播,發送者發出廣播,接收者接收廣播後進行處理;

(2)使用Handler和Message,如下載線程完成下載任務後,給UI發送Message,UI收到Message後更新界面。

但是這些方法都比較繁瑣,一種比較簡單有效的方法就是使用事件總線。事件總線的基本原理是發送者把消息發送到事件總線,然後事件總線在接收者中查找哪些方法注冊了這個事件,如果某個方法注冊了這個事件,就觸發該方法。這樣實現組件之間的通信要比其他方法簡單得多,代碼也更加簡潔。

1.下載simple_eventbus.jar,並導入Android工程,並且在需要發送或接收消息的組件裡面import下面兩個類:

import org.simple.eventbus.EventBus;
import org.simple.eventbus.Subcriber;

2.新建兩個Activity:MainActivity和Activity2。其中MainActivity作為消息的接收者,Activity2作為消息的發送者。由於這兩個Activity都要使用事件總線,在onCreate(Bundle savedInstanceState)中需要注冊EventBus:

EventBus.getDefault().register(this);

在onDestroy()中需要注銷EventBus:

EventBus.getDefault().unregister(this);

3.在Activity2中新建一個Button,onClick()方法如下:

@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btnRun2:
num++;
txtStatus.setText("點擊了" + num + "次!");
EventBus.getDefault().post(new Object(), "my_tag");
break;
default:
break;
}
}

每點擊一次Button,就使用EventBus.getDefault().post()方法向EventBus發送一次消息。EventBus.getDefault().post()有兩個參數:第一個參數是向事件接收者傳遞的對象,由於我們這裡不需要向發送者傳遞對象,所以只new了一個Object;第二個參數是tag,相當於廣播裡面的action,只有接收者裡面注冊了這個tag的方法才會被觸發,沒有注冊這個tag的方法就不會被觸發。

4.在MainActivity中新建接收消息的方法:

@Subcriber(tag = "my_tag")
private void updateUI(Object o){
num++;
txtStatus.setText("Activity 2 點擊了" + num + "次!");
Log.e("num=", String.valueOf(num));
}

其中@Subcriber(tag = "my_tag")注解表明該方法是一個消息接收方法,tag = "my_tag"表明該方法注冊了"my_tag"這個消息,接收到該消息該方法就會被觸發。

5.運行結果。進入Activity 2,6次點擊Button:

再回到MainActivity,可以看到updateUI()被觸發,顯示出了Activity 2的點擊次數:

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved