EventBus 深入学习四之实例&类说明 本篇开始,则转向greenrobot/EventBus, 之前基本上将Guava中设计的思路捋了一遍,逻辑比较简单和清晰,接下来则看下广泛运用于android...(String.class)); eventBus.register(this); assertTrue(eventBus.hasSubscriberForEvent(...(eventBus.hasSubscriberForEvent(CharSequence.class)); assertFalse(eventBus.hasSubscriberForEvent...public @interface Subscribe { ThreadMode threadMode() default ThreadMode.POSTING; /** * If true...SubscriberInfo 定义获取订阅者注册方法的接口 通常这个会和SubscriberInfoIndex 配合使用,后面这个接口专注返回 SubscriberInfo对象,其默认的实现也比较简单,
EventBus的线程分发中介绍了EventBus中发布和订阅方法设置了ThreadMode之间的关系,最终表格如下: 发布线程 Android主线程 非Android主线程,线程a POSTING Android...而该对象表示当前程序平台是否支持主线程,Builder中的定义如下: MainThreadSupport getMainThreadSupport() { //case:不为null,直接返回...= null) { return mainThreadSupport; } //case:Android平台,返回AndroidHandlerMainThreadSuppoet...executorRunning) { executorRunning = true; //交给EventBus的线程池,执行自己...可以看到与Background的区别,ASYNC模型下,总是会创建一个新的线程进行调用invokeSubscriber()方法的;而Background中有个死循环,会存在很多情况下,很多POST的处理是在同一个线程中的
EventBus支持线程分发,在上一篇博客EventBus简介以及初步使用中,了解到EventBus的使用主要涉及事件发送者,以及事件订阅者;对于发送和订阅这两个行为,可以在不同的线程中,这就是EventBus...不同于MAIN,总是会被分发到主线程的队列中,不会阻塞post线程。...如果post不是在主线程,那么事件处理会被直接在post线程中调用;如果post是主线程,EventBus使用了一个单一的background线程,那么所有主线程post的事件将会按照队列顺序进入,因此这要求事件处理尽可能快速返回...如果不是在android平台中,那么总是会使用一个background线程。...ThreadMode.ASYNC 事件处理总是在一个单独的线程。总是与post线程和main线程独立。
双重加锁校验 可以保证 EventBus 实例对象 全局 全时间线 唯一 ; /** * EventBus是Java和Android的中央发布/订阅事件系统。...* 事件处理方法必须由{@link Subscribe}注释,必须是公共的,不返回任何内容(void), * 并且只有一个参数(事件)。...实例对象 ; 在 EventBus(EventBusBuilder builder) 构造函数中 , 初始化了一堆数据 ; /** * EventBus是Java和Android的中央发布/订阅事件系统...* 事件处理方法必须由{@link Subscribe}注释,必须是公共的,不返回任何内容(void), * 并且只有一个参数(事件)。...sendNoSubscriberEvent = true; boolean throwSubscriberException; boolean eventInheritance = true
对于Android开发者来说,经常使用的消息传递方式有很多种,从最早使用的Handler、BroadcastReceiver、接口回调,到近几年流行的通信总线类框架EventBus、RxBus。...Android消息传递框架,总在不断的演进之中。 从EventBus说起 EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化Android事件传递。...EventBus可以代替Android传统的Intent、Handler、Broadcast或接口回调,在Fragment、Activity、Service线程之间传递数据,执行方法。...现在看来,EventBus给Android开发者世界带来了一种新的框架和思想,就是消息的发布和订阅。这种思想在其后很多框架中都得到了应用。 ?...实时数据刷新,当组件处于活跃状态或者从不活跃状态到活跃状态时总是能收到最新的数据。 解决Configuration Change问题,在屏幕发生旋转或者被回收再次启动,立刻就能收到最新的数据。
阿里 Android 团队在年初开源了他们的容器化框架 Atlas 就很大程度说明了当前 Android 平台开发大型商业项目所面临的问题。...# 是否需要单独编译 true表示需要,false表示不需要 isNeedHomeModule=false #isNeedHomeModule=true isNeedChatModule=false #...例如,需要单独运行module_home模块时,只需要开启对于的配置即可isNeedHomeModule=true。...如果跨模块跳转需要返回数据,即Activity的StartActivityForResult,则可以使用下面的方式。...* * eventBus返回数据 */ private Button mBtnBackData; private String name; private
前言 好多分析EventBus的文章,喜欢上来就贴源码,我看了好多次总是迷迷糊糊的,这次花时间彻底整理一下EventBus,发现EventBus核心其实就是三幅图,这三幅图涉及的是三个HashMap表,...弄懂这三幅图那么EventBus就懂了。...第二幅图(订阅事件和订阅者) 这种表关系是event和subsciption的对应关系,比如在Android中多个activity可能会注册监听同一个event事件,所以在执行: image.png EventBus.getDefault...if (aborted) { break; } } return true...【Android进阶学习视频】、【全套Android面试秘籍】关注我【主页简介】查看免费领取方式 第三幅图 在看第三幅图之前思考一个问题,postSticky到底是怎么执行的?
public @interface Subscribe { ThreadMode threadMode() default ThreadMode.POSTING; /** * 如果为true...* 使用此模式的事件处理程序必须快速返回,以避免阻塞发布线程(可能是主线程)。...使用此模式的订阅服务器必须快速返回以避免阻塞主线程。 * 如果不在Android上,其行为与{@link#POSTING}相同。...*/ MAIN, /** * 在Android上,订户将在Android的主线程(UI线程)中被调用。...* 如果发布线程是主线程,EventBus将使用一个后台线程,该线程将按顺序传递其所有事件。 * 使用此模式的订阅者应尝试快速返回,以避免阻塞后台线程。
:focusable="true" android:focusableInTouchMode="true" 软键盘不遮挡 解决Android软键盘在全屏下设置adjustResize无效的问题 页面显示时不显示输入法...stateAlwaysHidden 当该Activity主窗口获取焦点时,软键盘总是被隐藏的,不管是确认导航到该Activity还是Activity被覆盖后显示出来。...="true" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true...adapter adapter.notifyDataSetChanged() } 常用方法 TextUtils.isEmpty() 如果传入的String 为NULL或者Length为0的话就返回...fun onStop() { EventBus.getDefault().unregister(this) super.onStop() } 发送粘性事件 EventBus.getDefault
一.EventBus概述 1.EventBus的三要素 EventBus有三个主要的元素需要我们先了解一下: Event:事件,可以是任意类型的对象。...可以自己实例化EventBus对象,但一般使用EventBus.getDefault()就好了,根据post函数参数的类型,会自动调用订阅相应类型事件的函数。...2.EventBus的四种ThreadMode(线程模型) EventBus3.0有以下四种ThreadMode: POSTING(默认):如果使用事件处理函数指定了线程模型为POSTING,那么该事件在哪个线程发布出来的...= ThreadMode.POSTING,sticky = true) public void onUserEvent(MessageEvent event) { name.setText("用户名..." android:layout_centerInParent="true" android:gravity="center" android:text="Welcome" android
本文实例为大家分享了Android实现EventBus登录界面与传值的具体代码,供大家参考,具体内容如下 展示效果 ?...添加EventBus导入依赖 compile 'org.greenrobot:eventbus:3.0.0' 主MainActivity方法 public class MainActivity extends.../logo" android:layout_centerHorizontal="true" android:layout_marginTop="40dp" / <EditText android...="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android...="true" android:layout_marginTop="32dp" android:id="@+id/tv_b" / 以上就是本文的全部内容,希望对大家的学习有所帮助。
本文实例为大家分享了Android EventBus普通事件和粘性事件,供大家参考,具体内容如下 展示效果 ? ?...添加EventBus导入依赖 compile 'org.greenrobot:eventbus:3.0.0' 主MainActivity方法 public class MainActivity extends...onMoonEvent(MessageEvent message){ tv_a.setText(message.getMessage()); } @Subscribe(sticky = true...android:layout_centerInParent="true" android:id="@+id/tv_a" / <Button android:layout_width...android:layout_centerInParent="true" android:id="@+id/tv_b" / <Button android:layout_width
EventBus是一款针对Android优化的发布/订阅事件总线。可以替代广播、startActivityForResult、Handler、异步回调等来实现各组件间、组件与后台线程间的通信。...(isRegisterEventBus()) { EventBusUtil.register(this); } } /** * 是否注册事件分发 * * @return true...绑定EventBus事件分发,默认不绑定,子类需要绑定的话复写此方法返回true. */ protected boolean isRegisterEventBus() { return false...isRegisterEventBus()) { EventBusUtil.unregister(this); } } 如上,那岂不所有Base类的子类都需要去实现 isRegisterEventBus 方法,来返回是否绑定...EventBus,那对于不绑定EventBus的类来说不是很累赘麻烦嘛。
文章目录 一、EventBus 事件发送 二、事件发送 postSingleEvent 方法 一、EventBus 事件发送 ---- 在客户端的某个线程中 , 调用 EventBus.getDefault...().post("Hello EventBus !")...; EventBus.post 方法源码 : /** * EventBus是Java和Android的中央发布/订阅事件系统。...* 事件处理方法必须由{@link Subscribe}注释,必须是公共的,不返回任何内容(void), * 并且只有一个参数(事件)。...> eventClass = event.getClass(); 然后通过 eventInheritance 变量 , 判断是否支持事件类型的父类查找 , 该值默认为 true ; //
在同事的建议下学习了EventBus,在此做一下学习记录,侵权请告知一定及时删除。 EventBus概述 EventBus是针一款对Android的发布/订阅事件总线。...用法 (1)注册粘性事件 EventBus.getDefault().register(MainActivity.this); (2)处理粘性事件 @Subscribe(sticky = true...("POSTING",messageEvent.getMessage()); } @Subscribe(threadMode = ThreadMode.MAIN, sticky = true...MAIN",messageEvent.getMessage()); } @Subscribe(threadMode = ThreadMode.BACKGROUND, sticky = true...BACKGROUND",messageEvent.getMessage()); } @Subscribe(threadMode = ThreadMode.ASYNC, sticky = true
而 ModularEventBus 使用方法名作为事件名,方法返回值作为事件数据类型,不会引入重复信息且更加简洁。...fun deprecatedMethod() } 定义事件数据类型: 事件方法返回值即表示事件数据类型,支持泛型(如 List),支持不携带数据的无数据事件。...示例程序 ModularEventBus.debug(true) .throwNullEventException(true) .setEventListener(object : IEventListener...消息总线的演进之路:用 LiveDataBus 替代 RxBus、EventBus[6] —— 海亮(美团)著 Android 组件化方案及组件消息总线 modular-event 实战[7] ——...消息总线的演进之路:用 LiveDataBus 替代 RxBus、EventBus: https://tech.meituan.com/2018/07/26/android-livedatabus.html
1 EventBus优缺点 EventBus 作为 Android 开发中常用的框架,拥有着许多优点: 调度灵活。...EventBus 的 Subscriber 注册非常简单,调用 eventBus 对象的 register 方法即可,如果不想创建 eventBus 还可以直接调用静态方法 EventBus.getDefault...作为 github 的明星项目之一, EventBus 的源代码中许多技巧来改善性能; ---- eventbus的 缺点是他的代码逻辑不是很清楚,在 Subscriber 注册的时候,Subscriber..." android:layout_height="wrap_content" android:layout_centerInParent="true" android...:textSize="16sp" android:text="发送改变字体颜色的Event" /> 8.接收函数 EventBus除了可以使用onEventMainThread
什么是EventBus 由greenrobot组织贡献(该组织还贡献了greenDAO),一个Android事件发布/订阅轻量级框架,功能:通过解耦发布者和订阅者简化Android事件传递,EventBus...可以代替Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据,执行方法。...如何使用 首先gradle中引入 compile 'org.greenrobot:eventbus:3.0.0' EventBus常用的有三个函数 1.注册事件,注册过的类能够接受EventBus...; 2.注册Eventbus,和之前一样 EventBus.getDefault().register(this); 3.处理消息,注意在注解参数中声明:sticky:true,表示该事件能够接受粘性事件...@Subscribe(sticky = true, threadMode = ThreadMode.MAIN) public void onEvent(String event) { Log.d
; import android.os.Looper; /** * 接口到“主”线程,可以是您喜欢的任何线程。...通常在Android上使用Android的主线程。...handlerActive) { handlerActive = true; // 向 Handler 发送消息 , 执行 handleMessage...rescheduled = false; try { long started = SystemClock.uptimeMillis(); while (true...EventBusException("Could not send handler message"); } rescheduled = true
import android.widget.TextView; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe...; import android.widget.CheckBox; import android.widget.TextView; import org.greenrobot.eventbus.EventBus...; //判断商家所有的商品的checkbox是否选中 if (isChildChecked(childBeen)) { groupList.get(groupPosition).setChecked(true...groupBean.isChecked()){ return false; } } return true; } //主界面全选框选中状态 public void allChecked(boolean...="true" android:orientation="horizontal" <CheckBox android:id="@+id/cb_all" android:layout_width="wrap_content
领取专属 10元无门槛券
手把手带您无忧上云