事件总线分发库EventBus和Otto的简介及对比

什么是事件总线管理:

a.将事件放到队列里,用于管理和分发
b.保证应用的各个部分之间高效的通信及数据、事件分发
c.模块间解耦

Event Bus是一个发布 / 订阅的事件总线。Event Bus模式 — 也被称为Message Bus或者发布者/订阅者(publisher/subscriber)
模式 — 可以让两个组件相互通信,但是他们之间并不相互知晓。
基于事件总线管理/订阅/分发模式的。事件响应有更多的线程选择,EventBus可以向不同的线程中发布事件。
EventBus支持 Sticky Event。
使用时需要先注册订阅,然后向订阅者分发消息数据即可。包含4个成分:发布者,订阅者,事件,总线。订阅者可以订阅多个事件,
发送者可以发布任何事件,发布者同时也可以是订阅者。分订阅、注册、发布、取消注册等步骤。

Event Bus的基本用法

分订阅、注册、发布、取消注册。
注册:
EventBus.getDefault().register(this);
EventBus.getDefault().register(new MyClass());
//注册:三个参数分别是,消息订阅者(接收者),接收方法名,事件类
EventBus.getDefault().register(this,"setTextA",SetTextAEvent.class);

取消注册:
EventBus.getDefault().unregister(this);
EventBus.getDefault().unregister(new MyClass());

订阅处理数据:
public void onEventMainThread{}
public void onEvent(AnyEventType event) {}
onEventPostThread、onEventBackgroundThread、onEventAsync

发布:
EventBus.getDefault().postSticky(new SecondActivityEvent("Message From SecondActivity"));
EventBus.getDefault().post(new ChangeImgEvent(1));

EventBus的实际项目应用案例

实现效果:一处点击发送数据,另一处或多处注册点可以及时获取更新传输过来的数据。

涉及知识点:事件类自定义、注册,订阅事件、事件的发布、数据解析、取消注册。

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btn_send"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="发送事件" />
<TextView
android:id="@+id/tv_content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center"
android:textSize="20sp" />
</LinearLayout>
/**
* EventBus的实际项目案例演示
*/
public class MainActivity extends Activity {
private TextView tv_content;
private Button btn_send; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_content = (TextView) this.findViewById(R.id.tv_content);
btn_send = (Button) this.findViewById(R.id.btn_send); btn_send.setOnClickListener(new OnClickListener() {
@Override // 发送数据事件
public void onClick(View arg0) {
MyEvent my = new MyEvent();
my.setType("1");
my.setContent("1内容");
EventBus.getDefault().post(my);
}
});
EventBus.getDefault().register(this);
} public void onEvent(MyEvent event) {
if (event.getType().equals("0")) {
tv_content.setText(event.getContent());
}
} public void onEventMainThread(MyEvent event) {
if (event.getType().equals("1")) {
tv_content.setText(event.getContent());
}
} @Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
} }
public class MyEvent {
private String type;
private String content; public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}

45、Android事件总线分发库的使用的更多相关文章

  1. Android事件总线分发库EventBus3.0的简单讲解与实践

    Android事件总线分发库EventBus的简单讲解与实践 导语,EventBus大家应该不陌生,EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Han ...

  2. Android事件总线EventBus详解

    顾名思义,AndroidEventBus是一个Android平台的事件总线框架,它简化了Activity.Fragment.Service等组件之间的交互,很大程度上降低了它们之间的耦合,使我们的代码 ...

  3. Android事件总线(一)EventBus3.0用法全解析

    前言 EventBus是一款针对Android优化的发布/订阅事件总线.简化了应用程序内各组件间.组件与后台线程间的通信.优点是开销小,代码更优雅,以及将发送者和接收者解耦.如果Activity和Ac ...

  4. Android事件总线还能怎么玩?

    作者简介:何红辉,Android工程师,现任职于友盟. 顾名思义,AndroidEventBus是一个Android平台的事件总线框架,它简化了Activity.Fragment.Service等组件 ...

  5. Android事件总线

    Android中Activity.Service.Fragment之间的相互通信比较麻烦,主要有以下一些方法: (1)使用广播,发送者发出广播,接收者接收广播后进行处理: (2)使用Handler和M ...

  6. Android事件的分发机制

    在分析Android事件分发机制前,明确android的两大基础控件类型:View和ViewGroup.View即普通的控件,没有子布局的,如Button.TextView. ViewGroup继承自 ...

  7. 【第三篇】学习 android 事件总线androidEventbus之发布事件,子线程中接收

    发送和接收消息的方式类似其他的发送和接收消息的事件总线一样,不同的点或者应该注意的地方: 1,比如在子线程构造方法里面进行实现总线的注册操作: 2,要想子线程中接收消息的功能执行,必须启动线程. 3, ...

  8. 【第三篇】学习 android 事件总线androidEventbus之list数据事件的传递,发送list数据事件到另外一个Activity

    这个和普通的事件总线的发送接收一样. package com.example.mysimpleeventbus; import java.util.ArrayList; import java.uti ...

  9. 【第二篇】学习 android 事件总线androidEventbus之异步事件的传递

    1,不同Activity直接发送Ansy的事件,以及其他任何事件,必须通过 postSticky方式来进行事件的传递,而不能通过post的形式来进行传递:EventBus.getDefault().p ...

随机推荐

  1. Python 自用代码(调整日期格式)

    2017年6月28日 to 2017-06-282017年10月27日 to 2017-10-272017年12月1日 to 2017-12-012017年7月1日 to 2017-07-01 #co ...

  2. webmagic 初始化 startRequests

    在spider类中有三个方法可以初始化startRequests.可以对这些地方进行扩展. /** * create a spider with pageProcessor. * * @param p ...

  3. xubuntu openocd nRF51822 download --- 2

    昨天非常晚的时候才最终发现事实上Unkown USB Device并非错误,仅仅是个警告而已,所以我们不关心就能够.让Makefile继续往下走就能够.于是我尝试mbs,s110.cload和firm ...

  4. linux上MySQL改动password的各种方法,yc整理

    MySQL改动password的各种方法 整理了下面四种在MySQL中改动rootpassword的方法,可能对大家有所帮助! 方法1: 用SET PASSWORD命令 mysql -uroot my ...

  5. autoconfig.xml与antx.properties一级application.properties之间的关系

    Java web项目中一般都有配置文件,文件中包含一些配置信息供Java工程启动和运行时使用,这些常见的配置文件大都是一些以.properties后缀的文件,比如常见的antx.properties以 ...

  6. ASP.NET中session和ViewState区别

    session变量是保存在Sever的内存中的,用的太多肯定会拖累Sever的,而且20分钟后session变量就会过期,不适合保存长期变量. ViewState是将数据保存在页面隐藏的控件中,永远不 ...

  7. unsupported major.minor version 解决方法

        转载自http://hi.baidu.com/fatchong/blog/item/191da23b478bbfef15cecbae.html         一直以来都是用jdk1.5,这次 ...

  8. Hibernate单向“一对一”关联

    1. 基于外键关联的单向“一对一”关联其中指定many-to-one的unique="true",为单向“一对一”,不指定就是单向“多对一” <class name=&quo ...

  9. nodejs 命令行交互

    人机交互 function readSyncByfs(tips) { tips = tips || '> '; process.stdout.write(tips); process.stdin ...

  10. oracle导出表的办法

    1.先进行表分析(一定要执行此步,否则查询空表可能不准确) select 'analyze table '||table_name||' compute statistics;' from user_ ...