Android发布订阅事件总线EventBus
来源:互联网 发布:湖南干部培训网络 编辑:程序博客网 时间:2024/06/01 09:14
概述
什么是EventBus?
EventBus内部角色介绍
配置
实战案例
概述
在之前传统的Android开发中,线程间或者Activity、Service等组件之间传递消息我们比较倾向于Intent、Handler、Broadcast去实现。接下来跟大家探讨一个很好用的Android的发布/订阅事件总线框架EventBus,这个框架在之前的项目中也有使用过,直到今天才决定整理一片文章梳理下该框架,方便自己梳理内容和提供给大家参考。
什么是EventBus?
EventBus是用于Android的发布/订阅事件总线机制的框架,主要功能是替代Intent、Handler、Broadcast在例如Activity、Fragment这样的功能组件之间或者是线程间的消息传递,是一种发布订阅设计模式(Publish/Subsribe),或称作观察者设计模式。EventBus的优点在于代码优雅,消耗更少,并且将发送者与接受者解耦(降低两者之间的依赖程度)。
EventBus内部角色介绍
Event :传递的事件对象
Subscriber :事件的订阅者
Publisher:事件的发布者
ThreadMode :定义EventBus的线程模式
EventBus的大致工作流程是先自定义一个类,定义一个事件(Event)类型。然后在要接收消息的界面(订阅者Subscriber)进行注册。接下来在要发送信息的界面(发布者Publisher)进行信息的发送。消息发出后然后在订阅者的界面进行消息的接收。当所有操作完成之后解除EventBus的注册。
EventBus的四种线程模式
ThreadMode.POSTIONG:表示该方法会在当前发布事件的线程执行,默认的线程模式
ThreadMode.MAIN:表示在UI线程(主线程)中执行。
ThreadMode.BACKGROUND:如果当前线程不是主线程,则在当前线程执行。否则加入后台任务队列,使用线程池调用。
ThreadMode.ASYNC:加入后台任务队列,使用线程池调用。
Subscriber Priorities(优先级)
优先级顾名思义,等级越高越先执行。EventBus可以通过调整priority来设置优先级,用整数来设置,数字的值越大优先级别越高,越优先执行。
配置
方式一:下载jar包导入工程
Jar包下载地址:https://github.com/greenrobot/EventBus/releases
下载好EventBus的jar包后导入项目的libs目录,然后右键add as library
方式二:在build.gradle中添加网络依赖
compile ‘org.greenrobot:eventbus:3.0.0’
实战案例
为了更好的理解EventBus的工作机制,找了一个Demo加上注解,方便理解。
首先自定义一个类,用来定义事件类型:
public class MyEvent { private String mMsg; public MyEvent(String msg){ mMsg = msg; } public String getMsg(){ return mMsg; }}
然后在要接收消息的界面(订阅者Subscriber)进行注册、信息接收:
/** * 事件的订阅者 Subscriber */public class MainActivity extends Activity { Button button; TextView textview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //在要接收消息的页面进行注册 EventBus.getDefault().register(this); button = (Button) findViewById(R.id.btn01); textview = (TextView) findViewById(R.id.tv01); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); } }); } public void onEventMainThread(FirstEvent event) { String msg = "onEventMainThread收到了消息:" + event.getMsg(); tv.setText(msg); Toast.makeText(this, msg , Toast.LENGTH_SHORT).show(); } @Override protected void onDestroy() { super.onDestroy(); //在onDestroy生命周期中解除注册 EventBus.getDefault().unregister(this); }}
接下来在要发送信息的界面(发布者Publisher)进行信息的发送:
/** * 事件发布者 Publisher */public class SecondActivity extends Activity { private Button btn_SendMsg; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); btn_SendMsg = (Button) findViewById(R.id.btn_first_event); btn_SendMsg.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //发送事件 EventBus.getDefault().post(new FirstEvent("FirstEvent btn clicked")); } }); }}
- Android EventBus发布/订阅事件总线
- Android EventBus发布/订阅事件总线
- Android发布订阅事件总线EventBus
- 发布 / 订阅的事件总线(eventBus)
- android事件总线(eventbus)开源库发布
- android中EventBus框架(订阅事件总线)
- [Android] EventBus事件总线
- Android 事件总线EventBus
- Android EventBus事件总线
- 一、概述 EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间
- EventBus优化发布订阅事件详解
- Android事件总线EventBus详解
- android事件总线EventBus解析
- Android EventBus事件总线剖析
- 事件总线EventBus Android开源库的使用
- Android事件总线纷发库EventBus的使用方法
- Android之事件总线EventBus详解
- Android事件总线EventBus的用法详解
- hdu5818
- PL/SQL:open for [using] 语句
- 没有搞不定的项目,只需要抄开源项目即可、
- Hadoop之分布式集群中节点的动态添加与下架(笔记13)
- HttpURLConnection,get,post,网络请求
- Android发布订阅事件总线EventBus
- java继承和多态
- 写给喜欢计算机的机械专业硕士生
- 上传头像
- Planar Homography (共面点成像)& Epipolar Geometry(对极几何)
- 1
- linux debian系统搭建git步骤
- 深入理解Java中super关键字
- eureka客户端配置