Android消息传递之EventBus 3.0使用详解

EventBus示例:

之前做图片社交App的时候,需要处理一个点赞数据的同步,比如在作品的详情页点赞 需要同时更新列表页该作品的点赞数量,这里还是以此为例。

 1.)build.gradle添加引用

compile 'org.greenrobot:eventbus:3.0.0'

1

compile 'org.greenrobot:eventbus:3.0.0'

2.)定义一个事件类型

public class DataSynEvent { private int count; public int getCount() { return count; } public void setCount(int count) { this.count = count; } }

1234567891011

public class DataSynEvent {    private int count;     public int getCount() {        return count;    }     public void setCount(int count) {        this.count = count;    }}

3.)订阅/解除订阅

订阅

EventBus.getDefault().register(this);//订阅

1

EventBus.getDefault().register(this);//订阅

解除订阅

EventBus.getDefault().unregister(this);//解除订阅

1

EventBus.getDefault().unregister(this);//解除订阅

4.)发布事件

EventBus.getDefault().post(new DataSynEvent());

1

EventBus.getDefault().post(new DataSynEvent());

5.)订阅事件处理

@Subscribe(threadMode = ThreadMode.MAIN) //在ui线程执行 public void onDataSynEvent(DataSynEvent event) { Log.e(TAG, "event---->" + event.getCount()); }

1234

@Subscribe(threadMode = ThreadMode.MAIN) //在ui线程执行    public void onDataSynEvent(DataSynEvent event) {        Log.e(TAG, "event---->" + event.getCount());    }

ThreadMode总共四个:
  • NAIN UI主线程
  • BACKGROUND 后台线程
  • POSTING 和发布者处在同一个线程
  • ASYNC 异步线程

6.)订阅事件的优先级

事件的优先级类似广播的优先级,优先级越高优先获得消息

@Subscribe(threadMode = ThreadMode.MAIN,priority = 100) //在ui线程执行 优先级100 public void onDataSynEvent(DataSynEvent event) { Log.e(TAG, "event---->" + event.getCount()); }

1234

@Subscribe(threadMode = ThreadMode.MAIN,priority = 100) //在ui线程执行 优先级100    public void onDataSynEvent(DataSynEvent event) {        Log.e(TAG, "event---->" + event.getCount());    }

7.)终止事件往下传递

发送有序广播可以终止广播的继续往下传递,EventBus也实现了此功能

EventBus.getDefault().cancelEventDelivery(event) ;//优先级高的订阅者可以终止事件往下传递

1

EventBus.getDefault().cancelEventDelivery(event) ;//优先级高的订阅者可以终止事件往下传递

8.)处理代码混淆

-keepattributes *Annotation* -keepclassmembers class ** { @org.greenrobot.eventbus.Subscribe <methods>; } -keep enum org.greenrobot.eventbus.ThreadMode { *; } # Only required if you use AsyncExecutor -keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent { <init>(java.lang.Throwable); }

12345678910

-keepattributes *Annotation*-keepclassmembers class ** {    @org.greenrobot.eventbus.Subscribe <methods>;}-keep enum org.greenrobot.eventbus.ThreadMode { *; } # Only required if you use AsyncExecutor-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {    <init>(java.lang.Throwable);}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏非著名程序员

玩转EventBus,详解其使用

? 概述 EventBus是一款针对Android优化的发布/订阅(publish/subscribe)事件总线。主要功能是替代Intent,Handler,...

2006
来自专栏Android干货

Android项目实战(十三):浅谈EventBus

3146
来自专栏Android知识点总结

O1-开源框架使用之EventBus

说明使用POSTING,发布与订阅在同一个线程,也就是子线程,更新UI会崩 说明使用MAIN,不管发布者在哪,订阅者都在main线程,可更新UI,但不能耗时操...

892
来自专栏7号代码

Android应用界面开发——BroadcastReceiver(实现基于Service的音乐播放器)

BroadcastReceiver用于接收程序(开发者开发的程序和系统程序)发出的Broadcast Intent,程序启动BroadcastReceiver需...

982
来自专栏懒人开发

BottomNavigationView简单使用

之前见过类似这个库, 是带ripple效果的 不记得具体地址了,和这个类似 https://github.com/Ashok-Varma/BottomNav...

823
来自专栏Android干货

浅谈Adapter中观察者模式

35412
来自专栏ppjun专栏

Android十八章:EventBus3.0使用

总之,他可以代替handler发送msg和Message接受msg,还可以代替intent在activity,fragment等传递msg。

1021
来自专栏杨建荣的学习笔记

Oracle 12c Data Guard搭建(一) (r10笔记第57天)

对于使用12c的PDB,如果想尽快熟悉,掌握,那就是和业务挂钩,让它跑在业务上。当然是在能够基本驾驭它的前提下,要不就真成了甩手掌柜。11g可以玩得很好...

3859
来自专栏Android干货

Android项目实战(三十四):蓝牙4.0 BLE 多设备连接

7356
来自专栏潇涧技术专栏

Art of Android Development Reading Notes 8

《Android开发艺术探索》读书笔记 (8) 第8章 理解Window和WindowManager

801

扫码关注云+社区