30分钟学会EventBus3 0详解(二)(EventBus3 0的详细使用)(by星空武哥)

               

转载声明原创地址:http://blog.csdn.net/lsyz0021/article/details/52094855

30分钟学会EventBus3.0详解(一)(引入和初始化EventBus3.0)

30分钟学会EventBus3.0详解(二)(EventBus3.0的详细使用)


       写完上篇文章,这篇这心不想写了,但是每周至少一篇的习惯不能改啊!虽然EventBus使用起来很简单,但是种类特别多,比如他有粘性事件和非粘性事件,他们又都含有四种模式,并且还要测试在ui线程和非ui线程,所以情况很多种,废话不多说继续看。

1、EventBus工具类,这里为了使用方便写了一个简单的工具类,下面的文章就直接使用这个工具类了。

/** * 作者: lcw on 2016/7/7. * 博客: http://blog.csdn.net/lsyz0021/ */public class EventBusUtils {    private static final String TAG = "EventBusUtils";    private EventBusUtils() {    }    /**     * 注册EventBus     *     * @param subscriber 订阅者对象     */    public static void register(Object subscriber) {        if (!EventBus.getDefault().isRegistered(subscriber)) {            Log.e(TAG, "register: 注册成功");            EventBus.getDefault().register(subscriber);        } else {            Log.e(TAG, "register: 注册失败");        }    }    /**     * 取消注册EventBus     *     * @param subscriber 订阅者对象     */    public static void unregister(Object subscriber) {        EventBus.getDefault().unregister(subscriber);    }    /**     * 发布订阅事件     *     * @param event 事件对象     */    public static void post(Object event) {        EventBus.getDefault().post(event);    }    /**     * 发布粘性订阅事件     *     * @param event 事件对象     */    public static void postSticky(Object event) {        EventBus.getDefault().postSticky(event);    }    /**     * 移除指定的粘性订阅事件     *     * @param eventType class的字节码,例如:String.class     */    public static <T> void removeStickyEvent(Class<T> eventType) {        T stickyEvent = EventBus.getDefault().getStickyEvent(eventType);        if (stickyEvent != null) {            EventBus.getDefault().removeStickyEvent((T) stickyEvent);        }    }    /**     * 移除所有的粘性订阅事件     */    public static void removeAllStickyEvents() {        EventBus.getDefault().removeAllStickyEvents();    }    /**     * 取消事件传送     *     * @param event 事件对象     */    public static void cancelEventDelivery(Object event) {        EventBus.getDefault().cancelEventDelivery(event);    }}

2、创建订阅事件

public class MessageEvent public final String message; public MessageEvent(String message) {  this.message = message; }}

3、创建订阅者模式和类型

 3.1、订阅者模式分为四类:

ThreadMode.MAIN          不管从哪个线程发出的事件,MAIN模式都会在UI(主线程)线程执行ThreadMode.POSTING       事件从哪个线程发布出来的就会在该线程中运行ThreadMode.BACKGROUND    如果发送事件的线程是UI线程,则重新创建新的子线程执行,因此不能执行更新UI的操作ThreadMode.ASYNC         不管从哪个线程发出的事件,ASYNC模式都会创建一个新的子线程来执行</span>

3.2、订阅者的类型分为粘性事件和非粘性事件

 默认就是非粘性事件,如果是粘性事件,只需要在事件的注解上面加上

sticky = true
3.3、粘性事件,在注解上加上 priority = 优先级数(int值)
priority = 1

3.4、下面就这几种模式分别讲解

3.4.1、首先是EventBus的注册,在activity的onStart()中注册

        @Override protected void onStart() {  super.onStart();  EventBusUtils.register(this); }

  EventBus取消注册,在activity的onDestroy()中取消注册

        @Override protected void onDestroy() {  super.onDestroy();  EventBusUtils.unregister(this); }

3.4.2、发送事件

EventBusUtils.post(new MessageEvent("SecondActivity发布MessageEvent消息了"));

3.4.3、注册事件(含有优先级)

mian模式

 @Subscribe(threadMode = ThreadMode.MAIN, priority = 1public void onMessageEventMain(MyEvent.Message event) {  text2.setText(event.msg);  Log.v(tag, event.msg + " MAIN id = " + Thread.currentThread().getId()); }

POSTING模式

 @Subscribe(threadMode = ThreadMode.POSTING, priority = 2public void onMessageEventPost(MyEvent.Message event) {  if (isMainThread()) {   text2.setText(event.msg);   Log.v(tag, event.msg + " POSTING id = " + Thread.currentThread().getId());  } else {   Log.v(tag, event.msg + " POSTING id = " + Thread.currentThread().getId());  } }

BACKGROUND模式
        @Subscribe(threadMode = ThreadMode.BACKGROUND, priority = 3public void onMessageEventBackground(MyEvent.Message event) {  if (Looper.myLooper() == Looper.getMainLooper()) {   text2.setText(event.msg);   Log.v(tag, event.msg + " BACKGROUND id = " + Thread.currentThread().getId());  } else {   Log.v(tag, event.msg + " BACKGROUND id = " + Thread.currentThread().getId());  } }
ASYNC模式
@Subscribe(threadMode = ThreadMode.ASYNC, priority = 4public void onMessageEventAsync(MyEvent.Message event) {//  text2.setText(event.msg); // 不能在这里执行更新ui的操作  LogUtils.v(tag, event.msg + " Async id = " + Thread.currentThread().getId()); }

如果为粘性事件则:

发送粘性事件

EventBusUtils.postSticky(new MessageEvent("SecondActivity发布MessageEvent消息了"));

订阅粘性消息
 @Subscribe(threadMode = ThreadMode.MAIN, sticky = truepublic void MessageEvent(MessageEvent event) {  tv_text1.setText(event.message); }

更详细请看demo代码:https://github.com/lsyz0021/EventBusUtils

30分钟学会EventBus3.0详解(一)(引入和初始化EventBus3.0)

30分钟学会EventBus3.0详解(二)(EventBus3.0的详细使用)


拿出微信 扫码关注下面的微信订阅号,及时获取更多推送文章



           
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值