android 框架 eventBus

博途PLC如何建立与笔记本电脑端的连接?(新手必会) 对S7-1500PLC下载硬件组态或程序,需要建立PC与PLC的连接。 由于S7-1500CPU都具有PN端口,因此建立PC与S7-1500PLC的连接通常使用工业以太网来实现。 1.使用网线连接PC-PLC 使用网线,一端连接PC的以太网卡端口,另一端连接S7-1500CPU的PN端口。 2.设置本机IP地址 2.1 确认本机要设置的IP地址段 本机IP地址要和PLC程序组态IP地址段前三位保持一致,后一位使用组态中没有用到的IP地址段。如下图所示。 那么看了这个图片应该就知道了,地址应该设置成192. 阅读详情

前言


人生就是这样时而让你热血澎湃,时而让你撕心裂肺,你唯一能做的就是爱自己所爱,保持出心。

eventBus是用来做什么的

  • 简单而强大: EventBus是一个超级简单易学的API库。尽管如此,您的软件体系结构可能会通过解耦组件获得很大的好处:订阅者在使用事件时不知道发件人。
  • 测试对战: EventBus是最常用的Android库之一:数以千计的应用程序使用EventBus,包括非常流行的。超过十亿的应用程序安装说明一切。
  • 高性能:特别是在Android上,性能至关重要。EventBus被分析和优化了很多; 可能使其成为同类中最快的解决方案。
  • 基于方便注解的API (不牺牲性能):只需将@Subscribe注释放到订阅者方法中即可。由于注释的构建时间索引,EventBus不需要在应用运行时进行注释反射,这在Android上非常缓慢。
  • Android主线程交付:当与UI进行交互时,无论事件如何发布,EventBus都可以在主线程中传递事件。
  • 后台线程传递:如果您的订阅者执行长时间运行的任务,EventBus也可以使用后台线程来避免UI阻塞。
  • 事件和订阅者继承:在EventBus中,面向对象的范例适用于事件和订阅者类。假设事件类A是B的超类。类型B的已发布事件也将发布给对A感兴趣的订阅者。类似地,考虑订阅者类的继承。
  • 零配置: 您可以立即开始使用代码中任何位置的默认EventBus实例。
  • 可配置: 为了根据需要调整EventBus,可以使用构建器模式调整其行为

eventBus的基本使用

一:定义事件
此处的意义在于定义一个eventBus进行事件处理的时候处理的对象,就比如登陆的请求 就需要定义一个 封装一个包含用户名,和密码的事件类。

二:首先注册eventBus
注册处理事件的对象 代码如下:

 EventBus.getDefault().register(FristActivity.this);

三 :定义事件处理的方法
通过eventBus的注解定义处理事件的方法

 @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageReceive(MessageEvent event) {
        textView.setText(event.getMessage());
    }

四:事件的销毁

//        取消eventBus的注册
        EventBus.getDefault().unregister(this);

程序截图

这里写图片描述

线程的切换

EventBus可以为您处理线程:事件可以在与发布线程不同的线程中发布。一个常见的用例是处理UI更改。在Android中,UI更改必须在UI(主)线程中完成。另一方面,网络或任何耗时的任务不能在主线程上运行。EventBus可以帮助您处理这些任务,并与UI线程同步(无需深入研究线程转换,使用AsyncTask等)。

在EventBus中,可以使用四个ThreadMode中的一个来定义将调用事件处理方法的线程

  • 线程模式:posting
    订阅者将在发布该事件的同一个帖子中被调用。这是默认的。事件传递是同步完成的,所有订阅者一旦发布完成就被调用。这个ThreadMode意味着最小的开销,因为它避免了完全的线程切换。因此,对于已知完成的简单任务而言,这是推荐的模式,其时间很短,不需要主线程。使用这种模式的事件处理程序应该快速返回以避免阻塞发布线程,这可能是主线程。例:
@Subscribe(threadMode = ThreadMode.POSTING)
    public void onMessageReceive2(MessageEvent event) {
        textView.setText(event.getMessage());
    }
  • 线程模式 main
    订阅者将在Android的主线程(有时称为UI线程)中被调用。如果发布线程是主线程,则将直接调用事件处理程序方法(与ThreadMode.POSTING中描述的同步)。使用此模式的事件处理程序必须快速返回以避免阻塞主线程。例:
@Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageReceive(MessageEvent event) {
        textView.setText(event.getMessage());
    }
  • 线程模式 main_order
    订阅者将在Android的主线程中被调用。该事件总是排队等待以后传递给订阅者,所以邮件的调用将立即返回。这给事件处理一个更严格和更一致的顺序(因此名字MAIN_ORDERED)。例如,如果使用MAIN线程模式在事件处理程序中发布另一个事件,则第二个事件处理程序将在第一个事件处理程序之前完成(因为它被同步调用 - 将其与方法调用进行比较)。使用MAIN_ORDERED,第一个事件处理程序将完成,然后第二个将在稍后的时间点被调用(只要主线程有能力)
 public void onMessageReceive3(MessageEvent event) {
        textView.setText(event.getMessage());
    }
  • 线程模式 background
    订阅者将在后台线程中被调用。如果发布线程不是主线程,则会在发布线程中直接调用事件处理程序方法。如果发布线程是主线程,则EventBus将使用一个后台线程来按顺序发送所有事件。使用这种模式的事件处理程序应该尽快返回以避免阻塞后台线程。
public void onMessageReceive5(MessageEvent event) {
        textView.setText(event.getMessage());
    }
  • 线程模式 async
    事件处理程序方法在单独的线程中调用。这总是独立于发布线程和主线程。发布事件永远不会等待使用此模式的事件处理程序方法。事件处理程序方法应该使用这种模式,如果它们的执行可能需要一些时间,例如网络访问。避免同时触发大量长时间运行的异步处理程序方法来限制并发线程的数量。EventBus使用线程池有效地重用已完成异步事件处理程序通知中的线程。
  public void onMessageReceive4(MessageEvent event) {
        textView.setText(event.getMessage());
    }

总结: 总的来说就是可以控制事件处理的线程可以在ui线程中处理,也可以在后台线程处理,等等

粘性事件

粘性事件就是事件可以发送但是我不订阅就不会做处理,只有订阅之后才会做处理,例如有这么一个场景我们需要检测下载的图片在图片下载结束的时候给予提示,我们就可以注册一个eventBus对象 在后台进行图片的下载我们会在下载的过程中使用evnetBus发送下载的进度,和完成的时候但是现在我们不限知道下载的进度只要知道下载完成就行了就可以使用粘性事件在发送进度的时候在下载完成的时候进行订阅处理。

 button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EventBus.getDefault().postSticky(new MessageEvent("我是粘性事件"));
                finish();
            }
        });
 // 订阅对事件进行处理
  button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EventBus.getDefault().register(FristActivity.this);
            }
        });
  • 粘性事件的获取
    如您所见,最后的粘性事件会在注册时自动发送给匹配的订阅者。但有时手动检查粘性事件可能会更方便。也可能需要删除(消耗)粘性事件,以使它们不再被传递。例:
MessageEvent stickyEvent = EventBus.getDefault().getStickyEvent(MessageEvent.class);
// Better check that an event was actually posted before
if(stickyEvent != null) {
    // "Consume" the sticky event
    EventBus.getDefault().removeStickyEvent(stickyEvent);
    // Now do something with it
}

事件的优先级

eventBus事件的优先级就是不同优先级之间的事件是不是可以接收,正常来说是高优先级的事件可以接收第优先级的事件 代码如下

 @Subscribe(threadMode = ThreadMode.POSTING ,priority = 1)
    public void MessageDeal(MessageEvent messageEvent){
        Toast.makeText(this, "我的优先级是1"+messageEvent.getMessage(), Toast.LENGTH_SHORT).show();
//

    }
    @Subscribe(threadMode = ThreadMode.POSTING ,priority = 2)
    public void MessageDeal1(MessageEvent messageEvent){
//        取消事件的传递 通常是更高优先级的事件取消对低优先级的事件的订阅
        Toast.makeText(this, "我的优先级是2"+messageEvent.getMessage(), Toast.LENGTH_SHORT).show();
    }
    @Subscribe(threadMode = ThreadMode.POSTING ,priority = 3)
    public void MessageDeal2(MessageEvent messageEvent){
        Toast.makeText(this, "我的优先级是3"+messageEvent.getMessage(), Toast.LENGTH_SHORT).show();
    }

在这段代码中优先级为三的事件可以接收另外两个事件

但有的时候我们不想事件继续传递就可以将他取消调

EventBus.getDefault().cancelEventDelivery(messageEvent);

订阅索引

订阅者索引是EventBus 3的一个新功能。这是一个可选的优化,以加速初始用户注册。

订阅者索引可以在构建时使用EventBus注释处理器创建。虽然不需要使用索引,但为了获得最佳性能,建议在Android上使用索引

这里只说一种比较简单的创建索引的方法,

  • 使用annotationProcessor
    1 在app的build.gradle中加入如下代码
android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.example.xhh.eventbusdemo"
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [ eventBusIndex : 'com.example.myapp.MyEventBusIndex' ]
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
//    eventbus框架加载
    compile 'org.greenrobot:eventbus:3.1.1'
//    otto框架使用
    compile 'com.squareup:otto:1.3.8'
    annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
  • 索引的使用
//        使用eventBus的索引
        EventBus eventBus = EventBus.builder().addIndex(new MyEventBusIndex()).build();

        try {
            EventBus.builder().addIndex(new MyEventBusIndex()).installDefaultEventBus();

        } catch (Exception e) {
            e.printStackTrace();
        }
        //        使用默认的索引
        EventBus eventBus1 = EventBus.getDefault();
        //        注册eventBus
        eventBus1.register(this);

到此eventBus简单的使用已经结束了,内部的理论的描述大部分是官网上的
http://greenrobot.org/eventbus/documentation/

基于Simulink的电机功率因数校正仿真 PF=SP​=视在功率有功功率​=cosϕ⋅Irms​I1​​(非正弦时)位移因数(cosϕ):基波电压电流相位差畸变因数(I1​/Irms​):谐波导致电流有效值增大本文带你完成了电机系统功率因数校正的Simulink仿真,实现了:✅ 理解了低功率因数的成因与危害✅ 搭建了无PFC、无源PFC、有源PFC三种对比模型✅ 掌握了Vienna整流器建模与dq解耦控制方法✅ 实现了PF与THD的自动计算与评估✅ 验证了有源PFC在PF、THD、稳定性上的全面优势。 阅读详情

相关推荐

STM32 HAL库定时器中断里读编码器速度准吗?聊聊MG310电机的测速与防溢出处理

本文探讨了STM32 HAL库在定时器中断中读取编码器速度的精度问题,特别针对MG310电机的测速与防溢出处理提供了解决方案。通过对比定时中断法和编码器模式的性能,揭示了硬件编码器接口在降低误差和CPU占用率方面的优势,并详细介绍了CubeMX配置技巧和防溢出处理的工程实践。

weixin_28720767的博客 401

它来了,xhadmin多应用Saas框架正式发布!

xhadmin多应用Saas框架正式发布,不止于外表颜值,开发能力更是惊人的快!

张超博客 1003

《最游记》游戏开发全栈指南:从源码解析到实战部署

本文提供了一份详尽的《最游记》游戏源码全栈开发指南。文章深入解析了这款3D玄幻网游的完整源码结构,涵盖客户端、服务端、引擎和工具链,并提供了从环境搭建、核心模块解析到实战修改与部署的完整流程。对于希望深入理解MMORPG架构的开发者而言,这份指南是宝贵的实战资源。

weixin_28363123的博客 72

关于Eventbus的各个注解的讲解

使用eventbus来管理线程 Posting “”“订阅方和发送方在同一线程中执行” @Subscribe(threadMode = ThreadMode.POSTING) public void onPostingEvent(final PostingEvent event){ final String threadinfo = Thread.c...

Professional_6的博客 754

华为2022硬件逻辑笔试题

单选题(每题两分) 1.以下关于过程赋值的描述,不正确的是() A在非阻塞性过程赋值中,使用赋值符号“< =” B赋值操作符是“=”的过程赋值是阻塞性过程赋值 C在非阻塞性过程赋值中,对目标的赋值是非阻塞的(因为时延),但可预定在将来某个时间步发生(根据时延:如果是0时延,那么在当前时间步结束) D非阻塞性过程赋值在其后所有语句执行前执行 解:D 2.芯片的功耗和下列哪种不强相关_____________。 A资源利用率 B核电压 C组合逻辑级数 D翻转率 解:A 3.下列说

weixin_44072819的博客 1万+

STM32控制气泵和电磁阀实现

2、mos管的选型:mos管选择主要注意两个参数即可,一是导通的电流,二是耐压值,并且常用NMOS管,根据要求,气泵和电磁阀供电电压为12V,所以选择的mos管耐压值要大于12V,这里选用耐压值为30V的MOS管,并且导通电流为5.8A,如下图。1、气泵和电磁阀的开和关均为开关量,实现控制方法有多种,比如继电器,但是继电器动作有噪声且体积较大,更好的方法为使用mos管。使用STM32控制气泵和电磁阀的开和关,气泵和电磁阀的供电电压为12V。最终实现单片机控制气泵和电磁阀的开和关。

jacklood的博客 1万+

【EventBus】Subscribe 注解分析 ( Subscribe 注解属性 | threadMode 线程模型 | POSTING | MAIN | MAIN_ORDERED | ASYNC)

一、Subscribe 注解属性、 二、threadMode 线程模式 ( POSTING | MAIN | MAIN_ORDERED | BACKGROUND | ASYNC )、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 6752

HDR 人像肤色稳定实战:AE/AWB/ToneMap 冲突解耦与优先级裁决

人像 HDR 最容易“翻车”的就是**肤色飘**:AE 抢亮度、AWB 拉白点、TM 又在肩部压高光,三方各自“对”却合起来“错”。本文给出一套**工程可落地**的裁决策略:以**肤色 ROI 锚点**为最高约束,AE 先对脸部入射照度收敛,AWB 在**肤色先验 + 光源模型**下缓变,TM 采用**色相保持 + 中灰/肤色双锚**且时域一致化。配套**阈值与回归**(ΔE00、亮度漂移 RMS、频闪注入),把“主观对”的口径落到**可度量**,并给出逆光、多脸、霓虹等极端场景的**例外分流**。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1204

EventBus BackgroundPoster原理解析

EventBus相信大家都不陌生,所以这里偷个懒就不说具体用法了,不过在阅读本博客之前建议大家阅读博主的以下两篇博客,因为本篇是在这两篇的基础上写的: Otto源码解读 EventBus源码解析开篇 通过上面两篇博客,可以了解EventBus的工作原理,简单来说最核心就是: 1、收集应用中所有标注了@Subscribe的Method方法(当然这些方法都是属于具体的注册者对象(Subscri...

菜鸟博客 1875

ENS160传感器原理图设计,已量产(空气质量传感器)

ENS160 是一款集成式数字空气质量传感器,核心优势源于 “MEMS 传感元件 + 内置微处理器” 的架构。

不脱发的程序猿 571

3、灵巧手的设计与构造

本文详细探讨了灵巧手的设计与构造,包括多指结构、关节和连杆设计、传感器集成以及分层控制架构等内容。同时,通过工业装配、医疗手术辅助和日常生活辅助等实际应用案例,展示了灵巧手的灵活性和适应性,并分析了当前设计面临的挑战及未来发展方向。

brandy的博客 491

利用RxJava实现的事件总线(Event Bus)

概述RxJava 在Android的APP开发中使用越来越广泛,其实不只是Android项目,java web方向的使用也越来越广泛。好多公司现在都开始引入RxJava和RxAndroid。RxJava对于开发效率,降低维护成本具有很大的作用。RxJava采用的设计模式是典型的观察者模式,是一种响应式编程,支持链式操作。RxJava到底是什么?RxJava(RxJava在GitHub上的托管地址 )

Elven_Shi的专栏 2008

cesium 实时轨迹

运用cesium中model和polyline添加模型和轨迹线,用CallbackProperty方法来实时改变经纬度。

God's asylum的博客 1964

Android框架之路——EventBus的使用

一、简介 EventBus是由greenrobot 组织贡献的一个Android事件发布/订阅轻量级框架。EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过Even

等一杯咖啡的博客 3万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android框架EventBus的使用

在写代码的时候,有时候在类与类之间进行通信不太方便,自己就用到了EventBus。 EventBus主要用于应用程序内各组件间、组件与后台线程间的通信。 //第一步需要添加依赖 implementation 'org.greenrobot:eventbus:3.0.0' //在获取返回信息的Activity.java中的onCreate进行注册 EventBus.getDefault().reg...

weixin_44059750的博客 1257

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android开源框架—EventBus

EventBus,即事件总线,是针对Android跨进程、线程通信的优化方案,在一定程度上可以代替Handle、Intent、Brodcast等实现通信;如下图所示即EventBus的运行框架。

zenmela2011的专栏 1123

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android 事件传递——EventBus框架的使用

前言 EventBus是一个用于简化Andorid、Fragment、Threads、Service之间信息传递的一个发布/订阅事件集。 使用EventBus的建议: 并不建议将应用中所有的事件都通过EventBus进行发送,尤其对于一对一的组件之间通信,建议不要使用EventBus。EventBus的使用场景更像是一种广播,当我们向EventBus发送一个事件,则该事件将会传递给多个...

weixin_42046829的博客 596

eventbus使用_Android EventBus框架的使用介绍

EventBus 是Android和Java数据通信的一个简捷框架,在Android中,主要用于线程直接的通信以及Activity,Fragment等之间的数据交互等官方介绍简化组件之间的通信,解耦事件发送方和接收方,可以很好地处理Activity、Fragment和后台线程直接的数据交互,避免复杂且容易出错的依赖项和生命周期问题使您的代码更简单更快捷小(60k 的jar包)被安装在十亿以上的应用...

weixin_39624705的博客 109

Android 消息发布订阅框架:EventBus

1.是什么2.如何使用3.五种线程模型4.Eventbus2和Eventbus3的区别。

前期后期 1274

每天学习一个Android中的常用框架——14.EventBus

EventBus的集成和快速使用

赈川 900

[ 安卓框架] EventBus

1.简介 目录 1.简介 2.下载地址 3.基本使用案例 4.粘性事件使用: 4.1消息类 4.2第二个界面实现: 4.3粘性事件解注册 注意:重复注册会崩溃设置标志位 EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadc...

oDianZi1234567的博客 360

Android 开源框架:EventBus

目录 0、相关视频: 1、相关文章: 2、EventBus 简介 2.1、 三个角色 2.2、四种线程模型 3、EventBus 使用 3.1、引入依赖 3.2、定义事件 3.3、发布事件 3.4、黏性事件 3.5、优先级 0、相关视频: EventBus (2017.12.8) 1、相关文章: Android EventBus 的使用(文章1:阅读量6w,40赞)...

songzi1228的博客 1177
上一篇: android框架-GreenDao
下一篇: java基础- 枚举类
xh_4215
博客等级 码龄10年 7粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值