AndroidEventBus新特性:添加粘性事件、不需要手動註銷事件總線

剛看了下作者發佈的新版本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()函數,這就是最新版的特性之一,也是目前唯一不需要手動註銷的事件總線庫。

這裏需要注意是,粘性Sticky事件需要你手動進行移除!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章