剛看了下作者發佈的新版本AndroidEventBus v1.0.4版本,發現加了很多好東東,最大的兩個特性就是添加了粘性sticky事件和無需手動註銷事件
AndroidEventBus的github地址爲:github
下面是作者給出的粘性sticky事件運用場景,感覺挺給力的,這裏直接粘貼複製了
User.java類 :
// 實體類實現序列化
public class User {
String name ;
String phoneNum;
// 其他字段省略
public User(String aName) {
name = aName ;
}
// 代碼省略
}
首先User類不需要實現序列化接口,避免了那些樣板代碼。然後在MainActivity中直接將User對象作爲Sticky事件發佈即可。
public class MainActivity extends Activity {
// 某個點擊事件
@Override
public void onClick(View v) {
User aUser = new User("Mr.Simple");
aUser.phoneNum = "123456";
// 其他數據
// 發佈Sticky事件
EventBus.getDefault().postSticky(aUser);
// 跳轉到ProfileActivity頁面
Intent intent = new Intent(this, ProfileActivity.class);
startActivity(intent);
}
}
最後我們看看ProfileActivity如何接收數據。
public class ProfileActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
// 以Sticky的形式註冊
EventBus.getDefault().registerSticky(this);
}
@Subscriber
private void receiveUser(User info){
// 這裏實現你的邏輯即可, info即爲傳遞過來的User對象
}
}
在ProfileActivity中我們將ProfileActivity自身作爲訂閱者註冊到總線當中,此時ProfileActivity就會接收到上面發佈的Sticky事件,這個事件對象就是User對象。此時就會觸發ProfileActivity 中的receiveUser函數,info參數就是Sticky事件的那個用戶信息對象,在receiveUser中實現自己的邏輯即可。
是的!我們並沒有在onDestory中對訂閱者進行註銷,也就是沒有調用EventBus的unregister()函數,這就是最新版的特性之一,也是目前唯一不需要手動註銷的事件總線庫。