您的位置:首页 > 移动开发 > Android开发

EventBus 的用法

2016-06-27 10:57 363 查看

前言

Demo 地址

关于 EventBus 笔者将分两篇文章进行介绍。

EventBus 的用法

EventBus 的源码分析

什么是 EventBus 及优点

简化组件之间的通信

减弱事件发送者和接受者之间的耦合

使 Activity 、Fragment 和后台线程很好的进行消息传递

避免和生命周期之间复杂和易错的依赖关系。

使代码更加简洁

效率更高

轻量级(jar 包小于 50K) 等等

EventBus 的用法

引入 EventBus

首先去这里先下载 EventBus,然后导入你的项目里

新建一个类 MyEvent

public class MyEvent {

int id;
String msg;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

}


注册 EventBus

在需要接受消息的页面调用如下方法注册 EventBus,可以在 Activity 或者 Fragment 的 onCreate 方法里调用。在 onDestroy 方法中解注册。

@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EventBus.getDefault().register(this);//注册 EventBus
}

@Override protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}


发送消息

在需要发送消息的地方使用 EventBus 的 post 方法发送消息,这里的消息就是新建的类 MyEvent 的对象。

public void onClick(View view) {
MyEvent myEvent = new MyEvent();
myEvent.setId(1);
myEvent.setMsg("This is from SecondActivity");
EventBus.getDefault().post(myEvent);
}


接受消息

在需要接受消息的页面写一个方法 onEvent ,并使用 Subscribe 注解标记此方法是 EventBus 接受消息的方法

@Subscribe(threadMode = ThreadMode.MAIN) //标注此方法是 EventBus 接受消息的方法
public void onEvent(MyEvent myEvent){
Log.i(Tag,"MainActivity"+myEvent.getId()+"==="+myEvent.getMsg()+"==Thread="+Thread.currentThread());
}


Subscribe 注解有一个枚举类型的属性 threadMode ,它有四个值,默认值是 ThreadMode.POSTING。

ThreadMode.POSTING — 消息是从哪个线程里发送来的,接受消息的方法将会在和发送消息相同的线程里执行

ThreadMode.MAIN — 无论消息是否是从 mian 线程里发送来的,接受消息的方法都在 main 线程中执行

ThreadMode.BACKGROUND — 如果消息是从 main 线程中发送来的,将启动一个新的线程执行接受消息的方法,如果不是从 main 线程发送来的,接受消息的方法将在和发送消息相同的线程里执行

ThreadMode.ASYNC — 无论消息是从哪个线程里发送来的,都将启动新的子线程执行接受消息的方法。

结语

至此,EventBus 的用法已经介绍完,下篇将从源码分析 EventBus。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android EventBus