Gradle:java
implementation "com.blankj:rxbus:1.1"
複製代碼
public class YourActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 註冊 String 類型事件
RxBus.getDefault().subscribe(this, new RxBus.Callback<String>() {
@Override
public void onEvent(String s) {
Log.e("eventTag", s);
}
});
// 註冊帶 tag 爲 "my tag" 的 String 類型事件
RxBus.getDefault().subscribe(this, "my tag", new RxBus.Callback<String>() {
@Override
public void onEvent(String s) {
Log.e("eventTag", s);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
// 註銷
RxBus.getDefault().unregister(this);
}
}
複製代碼
// 發送 String 類型事件
RxBus.getDefault().post("without tag");
// 發送帶 tag 爲 "my tag" 的 String 類型事件
RxBus.getDefault().post("with tag", "my tag");
複製代碼
// 發送 String 類型的粘性事件
RxBus.getDefault().postSticky("without tag");
// 發送帶 tag 爲 "my tag" 的 String 類型的粘性事件
RxBus.getDefault().postSticky("with tag", "my tag");
複製代碼
public class YourActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 註冊 String 類型事件
RxBus.getDefault().subscribeSticky(this, new RxBus.Callback<String>() {
@Override
public void onEvent(String s) {
Log.e("eventTag", s);
}
});
// 註冊帶 tag 爲 "my tag" 的 String 類型事件
RxBus.getDefault().subscribeSticky(this, "my tag", new RxBus.Callback<String>() {
@Override
public void onEvent(String s) {
Log.e("eventTag", s);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
// 註銷
RxBus.getDefault().unregister(this);
}
}
複製代碼
若是用到事件總線的地方比較多,那麼能夠把事件總線的使用放到一個 Manager 中使用,好比我 Demo 中作的封裝以下所示:git
public class RxBusManager {
private static final String MY_TAG = "MY_TAG";
public static void subscribeRxBusManagerActivity(final RxBusManagerActivity activity){
RxBus.getDefault().subscribe(activity, new RxBus.Callback<String>() {
@Override
public void onEvent(String s) {
activity.updateText("without " + s);
}
});
RxBus.getDefault().subscribe(activity, MY_TAG, new RxBus.Callback<String>() {
@Override
public void onEvent(String s) {
activity.updateText("with " + s);
}
});
}
public static void postToRxBusManagerActivity(final String event) {
RxBus.getDefault().post(event);
}
public static void postWithMyTagToRxBusManagerActivity(final String event) {
RxBus.getDefault().post(event, MY_TAG);
}
public static void postStickyToRxBusManagerActivity(final String event) {
RxBus.getDefault().postSticky(event);
}
public static void postStickyWithMyTagToRxBusManagerActivity(final String event) {
RxBus.getDefault().postSticky(event, MY_TAG);
}
public static void unregisterRxBusManagerActivity(final RxBusManagerActivity activity) {
RxBus.getDefault().unregister(activity);
}
}
複製代碼
能夠看出這是在 RxBusManagerActivity 中要使用 RxBus 的相關代碼,這樣能夠更方便地管理應用中全部的事件總線,而不至於發了個事件都不清楚接收方在哪的尷尬。github
網上現有 RxBus 存有的問題:ide
介於以上問題,我仍是親自封裝一個簡潔的供你們使用,庫已經依賴了 RxAndroid 和 RxJava,因此導入了該庫的就不須要再額外導入那兩庫了。svg
固然,若是通訊頻率比較高追求效率的話仍是推薦使用 EventBus。post
還有一些細節就本身看源碼去了解吧,總共有用的代碼不超過 300 行哈。this
若是正好幫到了你,那可真是巧了哈,歡迎來個人 狗窩 坐坐。spa