事件总线分发库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. 基于Spring开发的DUBBO服务接口测试

    基于Spring开发的DUBBO服务接口测试 知识共享主要内容: 1. Dubbo相关概念和架构,以及dubbo服务程序开发步骤. 2. 基于Spring开发框架的dubbo服务接口测试相关配置. 3 ...

  2. Pinterest架构:两年内月PV从零到百亿

    Pinterest正经历了指数级曲线般的增长,每隔一个半月就翻番.在这两年里,Pinterest,从 每月PV量0增长到100亿,从两名c创始人和一个工程师成长为四十个工程师,从一台MySQL 服务器 ...

  3. MYSQL百万级数据,如何优化

    MYSQL百万级数据,如何优化     首先,数据量大的时候,应尽量避免全表扫描,应考虑在 where 及 order by 涉及的列上建立索引,建索引可以大大加快数据的检索速度.但是,有些情况索引是 ...

  4. 在Eclipse中导入dtd和xsd文件,使XML自动提示(转)

    DTD 类型约束文件 1. Window->Preferences->XML->XML Catalog->User Specified Entries窗口中,选择Add 按纽 ...

  5. 对于一个IE8兼容性问题的反思

    近期做了一个需求,功能非常easy,把用户的优惠券数量读取出来,然后显示到"用户中心"上.开发完毕后.别的浏览器正常.可是到IE8上就不行了.并且,按下F12之后,就又能够载入出来 ...

  6. Predix中模型设计

    GE的Predix使用了图形数据库作为Asset存储,用以解决传统RDBMS系统中扩展性差,不支持行的动态定义问题. 对于实体,或者Asset来说,由如下几个方面表述: ID: Ties everyt ...

  7. caffe 中如何打乱训练数据

    第一: 可以选择在将数据转换成lmdb格式时进行打乱: 设置参数--shuffle=1:(表示打乱训练数据) 默认为0,表示忽略,不打乱. 打乱的目的有两个:防止出现过分有规律的数据,导致过拟合或者不 ...

  8. 编辑HTML代码,批量制作博文清单

    当积累的博文多了,常想制作一个分类文件夹,方便读者阅读.这能够是一个不轻松且枯燥的工作. 以<关于"IT学子成长指导"专栏及文章文件夹>中文件夹的制作为例.介绍我的&q ...

  9. Skyscrapers Aren’t Scalable

     Skyscrapers Aren't Scalable Michael Nygard WE oFTEn HEAR SoFTWARE EnginEERing CoMpAREd to building ...

  10. gcc -M -MM -MQ -MF -MT -MD

    静态模式规则对一个较大工程的管理非常有用.它可以对整个工程的同一类文件的重建规则进行一次定义,而实现对整个工程中此类文件指定相同的重建规则.比如,可以用来描述整个工程中所有的.o 文件的依赖规则和编译 ...