Android 开发EventBus简单使用

从最简单的开始

EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。

1、下载EventBus的类库
源码:https://github.com/greenrobot/EventBus
可以直接添加依赖:

compile 'org.greenrobot:eventbus:3.0.0'
  • 基本使用步骤
    1.写一个事件类,用来消息传递等
public class DemoEvent {
    private String mMsg;
    public DemoEvent(String msg) {
        mMsg = msg;
    }
    public String getMsg(){
        return mMsg;
    }
}

2.为订阅者注册EventBus

EventBus.getDefault().register(this);

3.订阅者取消注册

  EventBus.getDefault().unregister(this);//取消注册EventBus

4.发布者发布消息

  EventBus.getDefault().post(
                        new DemoEvent("DemoEvent btn clicked"));

5.订阅者重写方法进行消息回调

 @Subscribe
    public void onEventMainThread(DemoEvent event) {

        String msg = "onEventMainThread收到了消息:" + event.getMsg();
        bt.setText(msg);
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
    }

通过这五个步骤,就实现了消息的传递,大家并没有看到handle等。
先看一下一个简单的Demo效果图
EventBus简单使用
在MainActivity点击按钮进入SecondActivity界面,点击发送消息按钮,在主界面中接收到消息并吐司,改变文本内容,这边布局就不贴了。

  • 第一步,一个事件类
public class DemoEvent {

    private String mMsg;
    public DemoEvent(String msg) {
        mMsg = msg;
    }
    public String getMsg(){
        return mMsg;
    }
}
  • 第二步,在订阅者注册EventBus
    这里的订阅者就是MainActivity
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //注册EventBus
        EventBus.getDefault().register(this);
        bt = (Button) findViewById(R.id.bt);
        tv = (TextView) findViewById(R.id.tv);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //点击跳转
                Intent intent=new Intent(MainActivity.this,SecondActivity.class);
                startActivity(intent);
            }
        });
    }
  • 第三步,取消注册
    在MainActivity的onDestroy取消注册
@Override
    protected void onDestroy(){
        super.onDestroy();
        EventBus.getDefault().unregister(this);//取消注册EventBus
    }
  • 第四步,SecondActivity界面发送消息
public class SecondActivity extends AppCompatActivity {

    private Button bu;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        bu = (Button) findViewById(R.id.button);
        bu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //发送消息,参数为自己定义的事件类
                EventBus.getDefault().post(
                        new DemoEvent("DemoEvent btn clicked"));
            }
        });
    }
}
  • 第五步,订阅者接收事件消息
@Subscribe
    public void onEventMainThread(DemoEvent event) {

        String msg = "onEventMainThread收到了消息:" + event.getMsg();
        tv.setText(msg);
        bt.setText(msg);
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
    }

这里只使用了onEventMainThread这个方法,当然还有其它的方法,以后慢慢介绍。@Subscribe,这个注解必须加上,不然会报错。在这个方法中,我们将接收到自己发过来的事件对象,然后对消息进行处理。
到这里MainActivity中的代码全部完成了。

public class MainActivity extends Activity {


    private Button bt;
    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //注册EventBus
        EventBus.getDefault().register(this);
        bt = (Button) findViewById(R.id.bt);
        tv = (TextView) findViewById(R.id.tv);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //点击跳转
                Intent intent=new Intent(MainActivity.this,SecondActivity.class);
                startActivity(intent);
            }
        });
    }

//接收消息的方法,注释必须添加
    @Subscribe
    public void onEventMainThread(DemoEvent event) {

        String msg = "onEventMainThread收到了消息:" + event.getMsg();
        tv.setText(msg);
        bt.setText(msg);
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
    }

    @Override
    protected void onDestroy(){
        super.onDestroy();
        EventBus.getDefault().unregister(this);//取消注册EventBus
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值