EventBus框架的介绍和和基本用法(零基础都可以听懂的)


EventBus:让组件之间的通讯更简单,代码更简洁,更快,更小(小于50k),已经有100000000+的使用量。

Activity,Fragment,Thread,Services等等之间的通讯。

以前Activity之间的通讯是由Intent,Activity与Fragment之间的通讯使用getActivity,Threads之间用handler,Services之间的通讯是Intent。


EventBus的使用流程(3步):


第一步:定义一个事件,就是定义一个类:

public class MessageEvent(/*添加你需要的字段*/)

第二步:注册订阅者:

在oncreate方法中。eventBus.register(this)

声明你的订阅方法。public void onEvent(任意的事件类型){做你想做的}

第三步:发布订阅者Post Event

eventBus.post(event)


Demo代码:这个小Demo中MainActivity即是注册订阅者也是发布订阅者

第一步,定义一个类

<span style="font-size:14px;">public class TestEventBus {
    public String msg;

    public TestEventBus(String msg) {
        this.msg = msg;
    }
}</span>

第二步:注册订阅者(在onCreate方法中),需要导入jar包

public class MainActivity extends AppCompatActivity {

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

<span style="white-space:pre">	</span>//EventBus eventBus = new EventBus();
	// eventBus.register(this);
        //这两种方法都可以
        EventBus.getDefault().register(this);
    }
    //订阅方法
    public void onEvent(TestEventBus eventBus){
        
    }

第三步:发布订阅者Post Event

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

//        EventBus eventBus = new EventBus();
//        eventBus.register(this);
        //这两种方法都可以
        EventBus.getDefault().register(this);

        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TestEventBus eventBus = new TestEventBus("XIXIXIXIXI");
                EventBus.getDefault().post(eventBus);
            }
        });

       
    }

上面的demo是实现了EventBus传对组件之间消息的传递,他还可以对线程之间进行消息的传递,是通过下面几个方法来实现,可以替代handler


        public void onEvent(AnyEventType event){
           //post实在主线程,onEvent就在主线程

//post是在子线程,onEvent就在子线程
        }

        public void onEventMainThread(AnyEventType event){

//永远是在主线程

}

        public void onEventBackgroundThread(AnyEventType event){

//永远在子线程

}

        public void onEventAsync(AnyEventType event){

//永远在另外一个子线程

}


//注销
        EventBus.getDefault().unregister(this);//this为订阅者对象



 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值