EventBus的简单使用

第一步:

添加:compile 'org.greenrobot:eventbus:3.0.0'

第二步:

创建实体  传输信息的载体

public class MessageEvent {
    private String message;
    public MessageEvent(String message){
        this.message=message;
    }
    public String getMessage(){
        return message;
    }
    public void setMessage(String message){
        this.message=message;
    }
}

 

第三步:

注册EventBus  创建接收消息的方法(来自其他界面发送的信息)

public class MainActivity extends AppCompatActivity {
    private Button btn_jump;
    private String TAG="TAG";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_jump=findViewById(R.id.btn_jump);
        //注册EventBus
        EventBus.getDefault().register(this);
        btn_jump.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(MainActivity.this,SecondActivity.class));
            }
        });
    }
    /**事件处理方法**/
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEventMain(MessageEvent messageEvent){
        Log.e(TAG,messageEvent.getMessage() + " onEventMain" + " thread:" + android.os.Process.myTid());
    }
    /**事件处理方法**/
    @Subscribe(threadMode = ThreadMode.POSTING)
    public void onEventPosting(MessageEvent messageEvent){
        Log.e(TAG,messageEvent.getMessage() + " onEventPosting" + " thread:" + android.os.Process.myTid());
    }
    /**事件处理方法**/
    @Subscribe(threadMode = ThreadMode.BACKGROUND)
    public void onEventBackground(MessageEvent messageEvent){
        Log.e(TAG,messageEvent.getMessage() + " onEventBackground" + " thread:" + android.os.Process.myTid());
    }
    /**事件处理方法**/
    @Subscribe(threadMode = ThreadMode.ASYNC)
    public void onEventAsync(MessageEvent messageEvent){
        Log.e(TAG,messageEvent.getMessage() + " onEventAsync" + " thread:" + android.os.Process.myTid());
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

 

第三步:

发送消息 如果过程是先注册,后发送消息,则发送消息可用EventBus.getDefault().post(new MessageEvent("我是EventBus"));

如果有先发送信息后注册的情况,则发送消息可用EventBus.getDefault().postSticky(new MessageEvent("我是EventBus"));(粘性发送,将发送的信息放在缓存中,如何后面有新注册的,可以获取信息,当完全接收信息并处理后,必须移除所有粘性事件,

// 移除指定的粘性事件EventBus.getDefault().removeStickyEvent(Object event);

// 移除指定类型的粘性事件EventBus.getDefault(). removeStickyEvent(Class<T> eventType);

// 移除所有的粘性事件EventBus.getDefault(). removeAllStickyEvents();)

public class SecondActivity extends AppCompatActivity {
    private Button btn_destroy;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        btn_destroy=findViewById(R.id.btn_destroy);
        btn_destroy.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                EventBus.getDefault().post(new MessageEvent("我是EventBus"));
                startActivity(new Intent(SecondActivity.this,ThreeActivity.class));
            }
        });

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}

第四步:

在发送消息之后继续注册EventBus,在该页面如果想接收到先前接收到的消息,则发送消息必须用粘性事件

public class ThreeActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_three);
        EventBus.getDefault().register(this);
    }

    @Subscribe(sticky = true,threadMode = ThreadMode.MAIN)
    public void onEventMain(MessageEvent messageEvent){
        Log.e("Three_tag",messageEvent.getMessage());
        EventBus.getDefault().removeAllStickyEvents();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值