您的位置:首页 > 其它

EventBus使用

2016-06-30 14:17 429 查看
为了大家让大家更加清楚地理解EventBus并使用,本文采用课程的3W1H思路讲解

WHAT

EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息

WHY

传统的传递消息,Activity和Activity传递数据,Activity和fragment传递消息,Fragment和Fragment之前,还有Service和Activity。传递消息都使用Intent,或者接口回调,广播,等方法,使用起来非常麻烦。

发送者和接收者耦合度太高,那么就需要寻求一个解决方案。

首先,EventBus使用非常简便,简单的几个事件处理就能解决所有的消息传递问题。

使得消息发送者和处理者耦合度降低,也就是解耦。具有开销小,代码更优雅的特点,使用更加简便。

WHERE

当需要进行组件间通信的时候,或者一个界面的数据发生变化,其他所有的界面数据随之发生变化的时候,可以看出,使用EventBus是多么的方便和易控制。

HOW

(1).自定义一个事件类,可以是空类,比如:

public class AnyEventType {

public AnyEventType(){}

}

(2).获得事件处理实例

采用EventBus.getInstance()来获取默认的EventBus实例

(3).在要接收消息的地方进行注册

eventBus.register(this);

(4).发消息

eventBus.post(new AnyEventType event);

(5).处理消息

public void onEvent(AnyEventType event) {}

(6).解除注册

eventBus.unregister(this);

用一个案例来实现:

A和B两个Activity界面,从A跳转到B界面,从B界面发送一个事件,A收到事件后Toast打印出事件内容。

1.创建一个Android项目

2.下载EventBus的jar包导入工程

3.新建一个事件类

public class EventBusEvent {

private String mMsg;

public EventBus(String msg) {

mMsg = msg;

}

public String getMsg(){

return mMsg;

}

}

4.A界面接收消息注册EventBus,点击按钮跳转B界面

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//注册EventBus

EventBus.getDefault().register(this);

btn = (Button) findViewById(R.id.btn_try);

tv = (TextView)findViewById(R.id.tv);

btn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Intent intent = new Intent(getApplicationContext(),

SecondActivity.class);

startActivity(intent);

}

});

}

@Override

protected void onDestroy(){

super.onDestroy();

EventBus.getDefault().unregister(this);//反注册EventBus

}

//收到消息后处理

public void onEventMainThread(EventBusEvent event) {

String msg = "onEventMainThread收到了消息:" + event.getMsg();

Toast.makeText(this, msg, Toast.LENGTH_LONG).show();

}

5.B界面发送消息,调用下面的方法

EventBus.getDefault().post(

new EventBusEvent("Event start"));

实际演示,当在BActivity中点击按钮的时候,就会弹出一个Toast通知。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: