事件;弱引用持有订阅者,无需手动unregister,避免内存泄露。什么是Stickyand"/>

AndroidEventBus V1.0.4版发布啦

作者:超级管理员更新时间:2016-09-29 15:27:58来源:未知点击:15642
新版特性 支持Stickyandroid-study.com/pingtaikaifa/631.html">事件;弱引用持有订阅者,无需手动unregister,避免内存泄露。什么是Stickyand
新版特性
 
支持Sticky android-study.com/pingtaikaifa/631.html">事件;
弱引用持有订阅者,无需手动unregister,避免内存泄露。
什么是Sticky android-study.com/pingtaikaifa/631.html">事件?
 
关于Sticky android-study.com/pingtaikaifa/631.html">事件有的同学可能不是很熟悉,Sticky的意思是粘性的。在Android开发中,Sticky android-study.com/pingtaikaifa/631.html">事件只指 android-study.com/pingtaikaifa/631.html">事件消费者在 android-study.com/pingtaikaifa/631.html">事件发布之后才注册的也能接收到该 android-study.com/pingtaikaifa/631.html">事件的特殊类型。Android中就有这样的实例,也就是Sticky Broadcast,即粘性广播。正常情况下如果发送者发送了某个广播,而接收者在这个广播发送后才注册自己的Receiver,这时接收者便无法接收到刚才的广播,为此Android引入了StickyBroadcast,在广播发送结束后会保存刚刚发送的广播(Intent),这样当接收者注册完Receiver后就可以接收到刚才已经发布的广播。这就使得我们可以预先处理一些 android-study.com/pingtaikaifa/631.html">事件,让有消费者时再把这些 android-study.com/pingtaikaifa/631.html">事件投递给消费者。
 
AndroidEventBus也提供了这样的功能,有所不同是AndroidEventBus会存储所有的Sticky android-study.com/pingtaikaifa/631.html">事件,如果某个 android-study.com/pingtaikaifa/631.html">事件在不需要再存储则需要手动进行移除。用户通过Sticky的形式发布 android-study.com/pingtaikaifa/631.html">事件,而消费者也需要通过Sticky的形式进行注册,当然这种注册除了可以接收Sticky android-study.com/pingtaikaifa/631.html">事件之外和常规的注册功能是一样的,其他类型的 android-study.com/pingtaikaifa/631.html">事件也会被正常处理。发布、接收Sticky android-study.com/pingtaikaifa/631.html">事件的步骤有如下几步 :
 
1、发布Sticky android-study.com/pingtaikaifa/631.html">事件;

2、 某个时刻订阅者以Sticky的形式注册

当在某个时刻构造MyReceiver时就会将MyReceiver对象以Sticky的形式注册到EventBus中,此时先前发布的”hello” android-study.com/pingtaikaifa/631.html">事件就会被MyReceiver对象接收到,因此就会执行onStickyEvent函数,在该函数中实现具体的逻辑即可。当然,不要忘了在某个时刻将MyReceiver注销,以弱引用的形式持有订阅者的功能还没有完成呐!整个过程就这样结束了~
 
Sticky android-study.com/pingtaikaifa/631.html">事件的运用场景
 
上文中我们简单讲述了Sticky android-study.com/pingtaikaifa/631.html">事件的基本使用步骤,这里我们以一个具体的示例来看看Sticky android-study.com/pingtaikaifa/631.html">事件在开发中的使用场景。
 
在开发过程中,我们经常需要在Activity之间传值,我们的做法就是将数据塞到Intent中,并且为每个数据设置一个key。当我们传递的数据是一个实体类时,我们的这个类还需要实现序列化接口,比如Parcelable或者Serializable。例如我们需要将一个用户对象传递到用户个人信息展示页面。我们的常规做法是这样的:
 
User.java类 :

然后我们要在某个Activity中将这个用户数据传递给个人信息界面ProfileActivity。代码如下 :

在某个点击android-study.com/pingtaikaifa/631.html">事件的处理函数中我们通过Intent将数据传递给ProfileActivity。我们再看看ProfileActivity从Intent中取出数据的代码。

OK,至此整个过程才算结束了。 大哥,我只是需要传个数据啊!何苦啊! 这种方式产生了很多的样板代码,也让逻辑变得更复杂,容易出错。我们再看看使用Stickyandroid-study.com/pingtaikaifa/631.html">事件的实现方式。 User.java类 :

首先User类不需要实现序列化接口,避免了那些样板代码。然后在MainActivity中直接将User对象作为Stickyandroid-study.com/pingtaikaifa/631.html">事件发布即可。

最后我们看看ProfileActivity如何接收数据。

在ProfileActivity中我们将ProfileActivity自身作为订阅者注册到总线当中,此时ProfileActivity就会接收到上面发布的Sticky android-study.com/pingtaikaifa/631.html">事件,这个 android-study.com/pingtaikaifa/631.html">事件对象就是User对象。此时就会触发ProfileActivity 中的receiveUser函数,info参数就是Sticky android-study.com/pingtaikaifa/631.html">事件的那个用户信息对象,在receiveUser中实现自己的逻辑即可。
 
是的!我们并没有在onDestory中对订阅者进行注销,也就是没有调用EventBus的unregister()函数,这就是最新版的特性之一,也是目前唯一不需要手动注销的 android-study.com/pingtaikaifa/631.html">事件总线库。

推荐阅读

热门内容

android开发问题bitmap dr

按照官方文档的说明:当我们设置andro...

android,这代码怎么改,帮帮我

MainActivity.javapac...

大神们,帮我看下这个dialog怎么实现

再此先谢过了--------------...

安卓此布局用GridLayout怎么做,

--------------------...

关于BaseAdapter 中getIt

本帖最后由maxcion于2016-09...

关于Android开发的前景

今年IOS的表现大家都有目共睹,需求少,...

购物车 点击编辑 listview中的商

--------------------...

关于 PullToRefreshList

   假如我有10条数据,使用ListV...

ClassNotFoundExcepti

做了个调用百度定位接口的应用,自己新建一...

怎么把MPAndroidChart饼图中

我想把上面的文字在里面的那个效果换成下面...

最新内容

有7P 摄像头会卡的吗?

刚拿到7P几天,发现摄像头在打开的时候会卡住不动,退出来再进也需要两三次才能正常...

各位大神,为什么微信直接拍照片和小视频都不清晰了???

以前拍了,虽然不是原图,到也看得清字啊……现在直接看不清字了,求教怎么解决??7...

今日5.6元一件包邮!完美兼容 ios8 ios9 铝合金 尼龙线快充数据线

红硕iphone6数据线6s苹果5s数据线iphone5数据线6splus充电器...

自带地图能导入数据包吗?求具体方法

同上,自带的真的好用,就是不会离线...

app store里面下载不了

京东撸的7plus银色128G用了几天,appstore里面点下载的时候没反应,...

海淘美版,没有收到银行预授权扣款信息,是否成功?

如题,没有收到银行信息,今天订的,官网有一个大概的发货时间nov1-nov8算不...

天猫专卖店↓全屏碳纤维3D曲面 钢化膜 ↓。今日秒杀15.9元包邮。↓

大品牌FEELYMOS/新款iPhone7/7plus/6/6s/6plus/6...

N开头的机器升级7的心得,共分享

因为马上到期了,找...

等iPhone 7, 等套子

买了两个手机壳,等实物到手,等小7到手,等等等IMG_0151.JPG(12.3...

艾,感觉威锋网 没有以前火了

当年用苹果4的时候  那个帖子天天更新天天发  然后过了半年吧换了5c就感觉发帖...

iPhone7plus重大问题❤❤❤

只要用一下怎么后背摄像头发烫的厉害是很不正常的发烫大家也和我一样吗退货吧刚买回来...

还有坚守在9 系统的小伙伴吗 我是9.3.5

如题...

黑7P 14—20的订单有吗

黑7P  14—20的订单有吗我啊12-18我有个是14-20的...

这下是真的完蛋了

看图...

看看小7照的相片

看看用自带的相机拍的吗?有没做过后期,第一张拍得很漂亮。没有任何处理,直接出图回...

升极后感觉还不错

升极后感觉还不错没事的来看会片吧千部小视频每日准时更新高清无-马在线观看打开最新...

越狱 iOS10 咋选

10.0.2路过9.35路过越狱越狱能到10,10能回来越狱吗?慎重…越狱。等i...

京东的保修

大家看看京东的意外保,碎屏保,还有第二年换新价格,怎么觉得比AC+好多了,大家怎...

6S改7磨砂黑。补图,朋友们都和我要正面照片

我先说下你们的疑问。第一点,信号以及wifi工作一切正常第二点,没有缝隙,由于6...

诚心出手国行未拆封亮黑色7plus128GB

昨天早上收到的手机,目前还未从苹果的快递盒上摘下来,昨天已在论坛发帖:http:...