Android--EventBus

EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。

这里介绍下 主线程发送消息、发送粘性事件。

布局展示:
在这里插入图片描述
点击任一个跳转到下面的activity
在这里插入图片描述

操作步骤如下:

主线程发送消息
1,注册
2,解注册
3,创建发送消息类
4,发布消息
5,接收消息

发送粘性事件:
1,创建发送消息类
2,发布消息
3,注册
4,解注册
5,接收消息

练习代码:

第一个activity

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn_one;
    private Button btn_two;
    private TextView tv_main;
    private Intent intent;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn_one=(Button)findViewById(R.id.btn_one);
        btn_two=(Button)findViewById(R.id.btn_two);
        tv_main=(TextView)findViewById(R.id.tv_main);

        btn_two.setOnClickListener(this);
        btn_one.setOnClickListener(this);


        //注册广播
        EventBus.getDefault().register(MainActivity.this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_one://主线程发送消息
                intent=new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent);
                break;
            case R.id.btn_two://发送粘性消息
                EventBus.getDefault().postSticky(new StickyEvent("粘性消息"));
                intent=new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent);
                break;
        }
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //解注册广播
        EventBus.getDefault().unregister(MainActivity.this);
    }

    //主线程:接收消息
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void getEventMessage(EventBean bean){
        tv_main.setText(bean.string);
    }
}

第二个activity:

public class Main2Activity extends AppCompatActivity implements View.OnClickListener {

    private Button btn_one;
    private Button btn_two;
    private TextView tv_main2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);


        btn_one=(Button)findViewById(R.id.btn_one);
        btn_two=(Button)findViewById(R.id.btn_two);
        tv_main2=(TextView)findViewById(R.id.tv_main2);

        btn_two.setOnClickListener(this);
        btn_one.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_one://主线程消息:发送消息
                EventBus.getDefault().post(new EventBean("在吗?"));
                finish();
                break;
            case R.id.btn_two://粘性消息:注册
                EventBus.getDefault().register(Main2Activity.this);

                break;
        }
    }

	//接收粘性消息
    @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
    public void getSticky(StickyEvent event){
        tv_main2.setText(event.msg);
    }
	//解注册
    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().removeAllStickyEvents();
        EventBus.getDefault().unregister(Main2Activity.this);
    }
}

有一点需要的注意的是:在第二个activity的注册粘性消息,如果按多次(二次)会出现奔溃?所以为了避免按多次,可以进行一个boolean判断,来判断是否需要执行注册代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值