45、Android事件总线分发库的使用

事件总线分发库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;
    }
}
时间: 2024-08-06 07:38:42

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

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

Android事件总线分发库EventBus的简单讲解与实践 导语,EventBus大家应该不陌生,EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅.以及将发送者和接收者解耦.反正能帮助我们快速开发,这个确实是个好东西,其实鸿洋大神已经对源码作了一个较全面的剖析了 Android EventBus源码解析 带你深入理解Ev

EventBus事件总线分发库

本文围绕以下六个部分展开: 一.事件总线管理 二.EventBus 三.EventBus与BroadcastReceiver的区别 案例一 案例二:一处点击发送数据,另一处或多处注册点可以及时获取更新传输过来的数据 案例三:Activity和Service之间互相发布与接收事件 一.事件总线管理 将事件放入队列里,用于管理和分发. (1)保证应用的各个部分之间高效的通信及数据.事件分发. (2)模块间解耦:通过事件的分发,可以让各个模块间关联程序变小. 当在开发一些庞大的的项目时,模块比较多,这

Android 事件总线OTTO使用说明和源码解析

一.Otto简单介绍 OTTO是Square推出的库,地址:https://github.com/square/otto 先来看看otto的官方介绍 An enhanced Guava-based event bus with emphasis on Android support.Otto is an event bus designed to decouple different parts of your application while still allowing them to c

android事件总线(eventbus)设计与实现

1. 功能介绍 AndroidEventBus是一个Android平台的事件总线库, 它简化了Activity.Fragment.Service等组件或者对象之间的交互,很大程度上降低了它们之间的耦合,使得我们的代码更加简洁,耦合性更低,提升我们的代码质量. AndroidEventBus吸收了greenrobot的EventBus以及square的otto的优点,并在此基础上做出了相应的改进,使得事件总线框架更适合用户的使用习惯,也使得事件的投递更加的精准.灵活. 与EventBus.otto

Android事件总线

Android事件总线还能怎么玩? 顾名思义,AndroidEventBus ( github链接 ,关于我为什么要写这个库请参考<AndroidEventBus ( 事件总线 ) 的设计与实现>)是一个Android平台的事件总线框架,它简化了Activity.Fragment.Service等组件之间的交互,很大程度上降低了它们之间的耦合,使我们的代码更加简洁,耦合性更低,提升了我们的代码质量.但它能做的却不仅限于这些.经过定制,它能完成很多有意思的功能,那么究竟该怎么做呢?就让我们一起往

Android事件总线(二)EventBus3.0源码解析

相关文章 Android事件总线(一)EventBus3.0用法全解析 前言 上一篇我们讲到了EventBus3.0的用法,这一篇我们来讲一下EventBus3.0的源码以及它的利与弊. 1.构造函数 当我们要调用EventBus的功能时,比如注册或者发送事件,总会调用EventBus.getDefault()来获取EventBus实例: public static EventBus getDefault() { if (defaultInstance == null) { synchroniz

图片会说话系列之Android事件的分发传递机制

在一些复杂布局中,经常会遇到事件冲突,事件失效等问题,这就需要我们深入理解Android事件的分发传递机制.最好的方法是自己写一个demo,打印事件相关的日志查看其运行流程,然后再结合源码去深入理解.当然这里不会做这些,这里只有总结性的东西,如果你喜欢这种东西,那么请继续往下看. 老规矩,先上图: 用户的交互一般发生在触摸屏上,因此Android事件的传递必然涉及到ViewGroup和View,ViewGroup与View包含的处理事件传递的方法分别如下: ViewGroup: <span st

Android退出程序(三)——Android事件总线

概述 当我们跟随时间的脚步向前挪动的时候,总能发现原来以前的自己做了一些愚蠢的事情.但,不见得以前就是不好的事情.我在以前的博客中写过两种关于Android中如何退出应用程序的方法.近日,我又发现了一个看似高大上的方法,因为作为程序员的你,使用起来会更加方便.它就像是你得心应手的工具,在需要的时候让你有一种,还好有它的感觉.下面我就使用Android事件总线来对Android退出程序作一个说明. AndroidEventBus简介 AndroidEventBus是一个Android平台的事件总线

android事件总线(eventbus)开源库发布

 AndroidEventBus 如果你不知道事件总线是什么,那么没有关系,下面我们先来看这么一个场景: 你是否在开发的过程中遇到过想在Activity-B中回调Activity-A中的某个函数,但Activity又不能手动创建对象来设置一个Listener什么的? 你是否想在某个Service中想更新Activity或者Fragment中的界面? 等等之类的组件之间的交互问题-- 一经思考,你会发现Android中的Activity, Fragment, Service之间的交互是比较麻烦的,