Android 开发EventBus简单使用

来源:互联网 发布:在家英文网络客服 编辑:程序博客网 时间:2024/06/13 09:23

从最简单的开始

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    }}
原创粉丝点击