来自  资质荣誉 2019-10-10 08:27 的文章
当前位置: 澳门太阳娱乐手机登录 > 资质荣誉 > 正文

Android - EventBus 的封装

EventBus 是一个 Android 事件发布/订阅框架,通过解耦发布者和订阅者简化事件传递。既可以用于 Android 四大组件间的通讯,也可以用于异步线程和主线程间的通讯,支持指定事件处理的线程和优先级,可以发送与粘性广播类似的粘性事件。代码简洁,容易上手。

项目地址请看文末

为了提高代码的易用性,我们在使用 EventBus 的时候再进行一层封装,公共的部分放在 BaseActivity 或者 BaseFragment 里面,需要注册事件的子类,覆盖相应的方法就可以。

public abstract class BaseActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getLayoutResID; if (isRegisteredEventBus { EventBusUtils.register; } initView(); initData(); } @Override protected void onDestroy() { super.onDestroy(); if (isRegisteredEventBus { EventBusUtils.unregister; } release(); } /** * 获取布局 * * @return 布局 ID */ protected abstract int getLayoutResID(); /** * 初始化视图 */ protected void initView() { } /** * 初始化数据 */ protected void initData() { } /** * 释放资源 */ protected void release() { } /** * 是否注册事件分发 * * @return true 注册;false 不注册,默认不注册 */ protected boolean isRegisteredEventBus() { return false; } /** * 接收到分发的事件 * * @param event 事件 */ @Subscribe(threadMode = ThreadMode.MAIN) public void onReceiveEvent(EventMessage event) { } /** * 接受到分发的粘性事件 * * @param event 粘性事件 */ @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) public void onReceiveStickyEvent(EventMessage event) { }}

简言之,在 Activity 创建的时候,根据标识确定是否注册 EventBus,然后在销毁的时候解除注册。这里有两个处理事件的方法,分别处理普通事件和粘性事件,在主线程执行。如有需要,可以自行扩展其他方法。

public class EventBusUtils { private EventBusUtils() { } /** * 注册 EventBus * * @param subscriber */ public static void register(Object subscriber) { EventBus eventBus = EventBus.getDefault(); if (!eventBus.isRegistered(subscriber)) { eventBus.register(subscriber); } } /** * 解除注册 EventBus * * @param subscriber */ public static void unregister(Object subscriber) { EventBus eventBus = EventBus.getDefault(); if (eventBus.isRegistered(subscriber)) { eventBus.unregister(subscriber); } } /** * 发送事件消息 * * @param event */ public static void post(EventMessage event) { EventBus.getDefault().post; } /** * 发送粘性事件消息 * * @param event */ public static void postSticky(EventMessage event) { EventBus.getDefault().postSticky; }}

澳门太阳娱乐在线网址,这里统一使用 EventBusUtils 注册和发送事件,封装库的好处就是以不变应万变,比如源码 post 方法有改动,我们更改这一处就好,省时又省力。

public class EventMessage<T> { private int code; private T data; public EventMessage { this.code = code; } public EventMessage(int code, T data) { this.code = code; this.data = data; } public int getCode() { return code; } public void setCode { this.code = code; } public T getData() { return data; } public void setData { this.data = data; } @Override public String toString() { return "EventMessage{" + "code=" + code + ", data=" + data + '}'; }}

所有要发送的消息使用 EventMessage 传递,根据 code 确定消息类型,data 则是传递的数据部分,所有的统一都是为了容易处理。

public class EventCode { public static final int EVENT_A = 1000; public static final int EVENT_B = 1001;}

code 作为事件的区分,定义成常量,最好是根据模块来划分,这样容易管理和分类。

EventBusUtils.post(new EventMessage<>(EventCode.EVENT_A, "EventData"));

使用起来就是这么容易,事件订阅者根据 code 做出相应的处理,整个过程如行云流水般,潇洒畅快~

项目地址:EventBus

澳门太阳娱乐在线网址 1资料图

需要资料的朋友可以加入Android架构交流QQ群聊:513088520

点击链接加入群聊【Android移动架构总群】:加入群聊

获取免费学习视频,学习大纲另外还有像高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)等Android高阶开发资料免费分享。

本文由澳门太阳娱乐手机登录发布于 资质荣誉,转载请注明出处:Android - EventBus 的封装

关键词: