首页 文章 精选 留言 我的

精选列表

搜索[通信框架],共10000篇文章
优秀的个人博客,低调大师

Android各组件/控件间通信利器之EventBus

实际项目开发过程中,经常遇到如下场景:不同的应用程序组件的控件间具有一定的相互关联性,其中用户对后者进行的某种操作会引起前者的相应改变。举一个具体的场景:以糗事百科为例,在糗事列表页和详情页页,对于每个糗事而言,布局基本一致,在详情页点击了个赞,赞的数量增加,同时赞的图标发生了变化,此时返回到列表页,此糗事上的赞图标以及数量与刚刚详情页的需要保持一致。在举一个例子,对于多个底部导航tab下的资讯类阅读app,在咨询详情页点击了收藏,然后收藏成功,此时回到底部tab中的个人中心,假如个人中心中有我的收藏,同时后面显示的是收藏数量,此时此收藏数量需要同于于刚刚用户所进行的收藏/取消收藏而即时更改数字。凡此种种,类似需求场景非常常见。 有时候,当此类需求相对简单时,通过接口以实现回调等方式可以完成,但是当不同组件/控件之间的关系纷繁复杂时,基于接口的方案不仅使得代码非常繁琐,同时是的程序逻辑很混乱,基于此,EventBus,为此类需求的实现提供了非常方便的方案。 网上已经有不少EventBus的使用介绍,在此简单介绍下完整的使用流程。 1. 首先定义事件基类(其实不定义也可以,定义后的好处在于在同一个回调函数中直接依据不同的子类事件类型可以直接继续逻辑上的处理,代码和逻辑更加简洁清晰) 1 public class BaseEvent { 2 3 4 } 2. 定义具体的事件类型(以上述收藏事件为例) 1 public class FavorEvent extends BaseEvent { 2 3 private int did; 4 5 public FavorEvent() { 6 7 } 8 9 public FavorEvent(int did) { 10 this.did = did; 11 } 12 13 public int getDid() { 14 return did; 15 } 16 17 public void setDid(int did) { 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 void onEvent(BaseEvent event) { 2 // 接收收藏事件通知,同步处理收藏数字 3 if (event instanceof FavorEvent) { 4 // 即时更新收藏的数量(从sqlite中取得收藏数量) 5 updateFavorNum(); 6 } else if(..){ 7 ... 8 } 9 } 整个的使用流程主要也就这么多了,其中,关于子线程和UI线程之间等亦可进行类似事件通知,网上此类资料很多,不再赘述了。 --------------------------------------------------------------------------------- 笔者水平有限,若有错漏,欢迎指正,如果转载以及CV操作,请务必注明出处,谢谢! 分类: Android 本文转自Windstep博客园博客,原文链接:http://www.cnblogs.com/lwbqqyumidi/p/4041455.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Spring Integration 7.0 M3 发布,Spring 消息通信

Spring Integration 7.0.0 版本的第三个里程碑现已发布,一些值得注意的变化包括: JUnit 6 升级; 通过 JSpecify 和 Nullaway 实现的 Nullability 应用于项目中的每个包; AbstractPersistentAcceptOnceFileListFilter的实现现支持完整远程文件处理,以避免不同目录下同名文件的冲突; 现在,当maxFetchSize有限时,AbstractInboundFileSynchronizer会在轮询间缓存Session.list()结果(after filtering); Spring Retry 依赖项已被删除,其 API 已被 Spring Framework Core中的类似 API 取代; 所有可用的 major/minor 依赖升级。 此外,还发布了 6.5.2 和 6.4.7 版本,其中包含错误修复和依赖性升级。 有关更多详细信息,可参阅7.0 中的新功能。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册