android组建之间通信_Android各组件/控件间通信利器之EventBus

实际项目开发过程中,经常遇到如下场景:不同的应用程序组件的控件间具有一定的相互关联性,其中用户对后者进行的某种操作会引起前者的相应改变。举一个具体的场景:以糗事百科为例,在糗事列表页和详情页页,对于每个糗事而言,布局基本一致,在详情页点击了个赞,赞的数量增加,同时赞的图标发生了变化,此时返回到列表页,此糗事上的赞图标以及数量与刚刚详情页的需要保持一致。在举一个例子,对于多个底部导航tab下的资讯类阅读app,在咨询详情页点击了收藏,然后收藏成功,此时回到底部tab中的个人中心,假如个人中心中有我的收藏,同时后面显示的是收藏数量,此时此收藏数量需要同于于刚刚用户所进行的收藏/取消收藏而即时更改数字。凡此种种,类似需求场景非常常见。

有时候,当此类需求相对简单时,通过接口以实现回调等方式可以完成,但是当不同组件/控件之间的关系纷繁复杂时,基于接口的方案不仅使得代码非常繁琐,同时是的程序逻辑很混乱,基于此,EventBus,为此类需求的实现提供了非常方便的方案。

网上已经有不少EventBus的使用介绍,在此简单介绍下完整的使用流程。

1. 首先定义事件基类(其实不定义也可以,定义后的好处在于在同一个回调函数中直接依据不同的子类事件类型可以直接继续逻辑上的处理,代码和逻辑更加简洁清晰)

1 public classBaseEvent {2

3

4 }

2. 定义具体的事件类型(以上述收藏事件为例)

1 public class FavorEvent extendsBaseEvent {2

3 private intdid;4

5 publicFavorEvent() {6

7 }8

9 public FavorEvent(intdid) {10 this.did =did;11 }12

13 public intgetDid() {14 returndid;15 }16

17 public void setDid(intdid) {18 this.did =did;19 }20

21 }

3. 在需要监听此收藏事件的地方向EventBus注册事件监听器

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

4. 当需要取消注册事件监听器时

EventBus.getDefault().unregister(this);

注:Android中,当遇到如EventBus中的register时,一般的,相应都会有unregister逻辑。且经常register与unregister逻辑相互对应,处在如Activity等组件的不同生命周期中。这是因为EventBus(其他也类似)在注册时由于是采用硬引用,存在潜在的内存泄露问题,而在相应生命周期中(如onDestroy)取消注册,即可消除可能潜在的内存泄露问题。

5. 当事件发生时,需要通知相应事件监听器进行相应逻辑处理

1 //告知EventBus进行了收藏操作,让其通知相关感兴趣方(主要的是通知个人中心页面改变我的收藏数量)

2 EventBus.getDefault().post(new FavorEvent());

6. 其他组件/监听器具体事件逻辑

1 public voidonEvent(BaseEvent event) {2 //接收收藏事件通知,同步处理收藏数字

3 if (event instanceofFavorEvent) {4 //即时更新收藏的数量(从sqlite中取得收藏数量)

5 updateFavorNum();6 } else if(..){7 ...8 }9 }

整个的使用流程主要也就这么多了,其中,关于子线程和UI线程之间等亦可进行类似事件通知,网上此类资料很多,不再赘述了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学员感言html效果图,学员感言丨非计算机专业学员 开始学HTML5的点点滴滴

学员感言丨非计算机专业学员 开始学HTML5的点点滴滴来源:奇酷教育 发表于:2017-08-03 12:09:25在奇酷学员学习HTML5的这段时间里,让我学习到了实用的技能和知识。我是一个非计算机类学生,可以说是对编程一窍不通,在选择…

怎样发量暴增_发量少怎么增加发量 秃发女孩必学发量激増6招

发量少真的是秃发女孩心底的痛,女明星中发量多的代表是范冰冰,范爷的浓密发量令人羡慕不已,发量少的女明星代表就是杨幂,杨幂在三生三世里的后移发际线让网友群嘲不已,下面5号网小编带大家来看一下发量少怎么增加发量&…

html序列符号替换,Html标签替换(过滤掉html特殊符号)

/// ///替换标签&#xff0c;把 <>" 替换为HTML标记/// /// /// public static string returnHtml(stringstr){if (str.Trim() ! ""){str str.Replace("<", "str str.Replace(">", "str str.Replace(" ", …

vue项目导入elementui_在vue项目中使用elementui

如何让你的前端程序看起来很优雅而又简单。最近我做的项目几乎都是管理系统&#xff0c;所以为了节约时间&#xff0c;开始使用ui框架-----elementui。一个简单的管理系统来说&#xff0c;这套ui框架足够使用了&#xff0c;而且对样式的自定义来说&#xff0c;这套ui框架相对于…

42021高考成绩查询北京6一个,北京高考成绩查询时间:6月27日

北京教育考试院发布&#xff1a;2014北京高考成绩将于6月27日公布。本文有出国留学网高考频道为大家搜集整理&#xff0c;希望对大家有所帮助。平行志愿只进行一轮投档从2014年起&#xff0c;北京高招本科志愿设置从“小平行志愿方式”调整为“平行志愿组方式”。本科一批、二批…

tecplot批量导出图片_tecplot使用教程

Tecplot的使用方法之前也零零星星的使用这个软件&#xff0c;但是作图主要还是使用Matlab软件。此次以给文章作图为契机&#xff0c;正好系统的学习一下。Tecplot有多个版本&#xff0c;当前使用的是比较新的Tecplot 360 EX 2018版。搜索到的教程中有Tecplot 360 2010版本的。常…

请领导批阅文件怎么说_请领导吃饭,不要对外说,职场员工为何如此保密?

前一段时间公司员工晋升&#xff0c;因为小王在公司的表现非常不错&#xff0c;所以成为了公司领导的秘书。其实按理来说&#xff0c;成为公司领导的秘书与否&#xff0c;往往只需要看这个员工有没有眼力&#xff0c;看她的办事能力如何&#xff0c;能不能提高公司的整体效率&a…

幼儿使用计算机需要注意事项,儿童玩电脑注意事项

相信现在的家庭里面很多小孩子爱玩电脑&#xff0c;但是电脑玩多了&#xff0c;对孩子眼睛、身体都不好&#xff0c;那么应该怎么才能科学玩电脑呢&#xff1f;妈网百科给大家总结了一些其他家长的经验&#xff0c;希望能够帮得到各位有需要的家长。【与电脑保持距离】孩子与电…

c++实现卷积码编码和维特比译码_鑫艾勒维特家用别墅电梯:安全至上,无可替代...

近年来&#xff0c;随着房地产行业的兴起&#xff0c;家用别墅电梯作为房地产配套产业也逐渐走进了平常家庭别墅中&#xff0c;如今一句俗语“无梯不成墅”将电梯在别墅中的重要地位彰显的淋漓尽致。艾勒维特家用液压小电梯因其适用于私人住宅&#xff0c;适用场景多样等特点&a…

山东高中计算机知识,普通高中信息技术课程标准(2017年版)解读

六、实施建议实施建议主要从教学与评价建议、水平等级考试命题建议、教材编写建议及课程实施建议四个方面展开。(一)教学与评价建议教学建议上&#xff0c;紧密围绕学科核心素养&#xff0c;凸显“学主教从、以学定教、先学后教”的专业路径&#xff0c;具体从领会学科核心素养…

python是一种跨平台、开源、免费的高级动态编程语言吗_python是一种跨平台、开源、免费的高级动态编程语言,对么...

python是一种跨平台、开源、免费的高级动态编程语言&#xff0c;对。python具有简单、易学、速度快、免费、开源、可移植性、可扩展性、丰富的库等优点。python语言极其容易上手&#xff0c;它是一种代表简单主义思想的语言。python是一种跨平台、开源、免费的高级动态编程语言…

html js 打印编辑页眉,js 设置网页打印的页眉页脚和页边距

var HKEY_Root,HKEY_Path,HKEY_Key;HKEY_Root"HKEY_CURRENT_USER";HKEY_Path"//Software//Microsoft//Internet Explorer//PageSetup/";var head,foot,top,bottom,left,right;//取得页面打印设置的原参数数据function PageSetup_temp() {try{var Wshnew Ac…

某个元素的距离页面的左边距_如何提高办公写作效率?先设置好页面上的这4类数据,准没错...

有人说&#xff0c;在体制内混的好&#xff0c;首先要文笔好。这里要说的是&#xff0c;一个文笔好的人&#xff0c;可能在哪里都能混的好。#直言职场#因为很多表达形式都需要以文字做雏形&#xff0c;进而进行各种形式的变换和转化。就拿当下很热门的自媒体行业来说&#xff0…

简述使用计算机对会计工作的影响,简述使用计算机对会计工作的影响。

简述使用计算机对会计工作的影响。更多相关问题[多选] 创新战略的层面有()。[单选] ()是对现有产品、流程、方法的所做的渐进式改善&#xff0c;使得现有产品或功能有进一步的改善、更方便或更为便宜。[单选] ()指组织对竞争者短期内的优缺点及长期力与策略的了解。[单选] ()实…

图像ISP处理——自动曝光AE算法

图像ISP&#xff08;图像信号处理&#xff09;是指对通过摄像头捕捉到的图像进行处理和优化的算法。这些算法旨在改善图像的质量&#xff0c;增强细节&#xff0c;降低噪音等。以下是一些常见的图像ISP算法&#xff1a; 自动白平衡&#xff08;AWB&#xff09;&#xff1a; 调…

地线与接地螺丝_电气接地的规范要求及接地的各项参数,收藏!

申请加入微信群&#xff1a;加微信好友&#xff0c;diangong1968申请格式&#xff1a;城市-公司简称(电气工程师职称)点此去资料库下载本篇资料为了主要目的是保护人身和设备的安全&#xff0c;减少公司电气事故发生&#xff0c;控制公司人员和财产不受损失&#xff0c;所有电气…

html表单提交后显示,javascript – 在表单提交后在页面上显示消息

我有一个包含2个字段的表单(对于此示例),我使用JavaScript验证,如果字段包含数据,则表单将在用户单击“提交”按钮时提交.我在表单标签中使用iframe将输出发送到同一页面.我想做的是在表单下面显示一条消息,说“感谢您的提交”.我很难想出这个部分.function SubmitRentalForm()…

ai怎么渐变颜色_Ai渐变插画怎么丰富细节

此次教程只需小伙伴对AI软件有基本的操作了解就可以完成&#xff0c;易上手容易理解。止疼药瓶子1.新建画布800X600&#xff0c;绘制止疼药瓶子轮廓用矩形工具(W)绘制止疼药瓶子轮廓&#xff0c;圆角处用直接选择工具(A)选择矩形2个锚点&#xff0c;拉成自己想要的圆角。2.给止…

axure8.0发布html,Axure 8.0 beta最后一批新增和改进功能的介绍

之前一直想翻译Axure官方博客的这篇介绍&#xff0c;但一直没抽出时间&#xff0c;今天偶然发现ShunzUX翻译了这篇文章。阅读后觉得翻译得很准确&#xff0c;特别转来分享给大家。特别是On-Premises Axure Share&#xff0c;我之前都是翻译成『本地部署Axure Share』&#xff0…

实现option上下移动_Django实战2-自动化运维之配置管理-05:字典管理功能实现

本节内容主要实现CMDB基础数据管理功能的实现&#xff0c;文档中会介绍到datatables后端分页实现和过滤查询功能的实现。在Django实战1中已经自定义了 添加、修改等自定义类视图&#xff0c;本节中可以直接使用。1、字典管理页面实现首先来实现字段管理的基础管理页面&#xff…