hehonghui / AndroidEventBus

A lightweight eventbus library for android, simplifies communication between Activities, Fragments, Threads, Services, etc.
Apache License 2.0
1.61k stars 391 forks source link

能够支持 Sticky方式吗? #8

Open forrestpan05 opened 9 years ago

forrestpan05 commented 9 years ago

greenrobot eventbus 支持sticky, 举个例子,我把网络状态广播改成 eventbus方式, 在Application 中注册广播接收判断网络改变, 再post出去, 当前acitivity 创建时,可能早已经post了, 因此该 activity就接收不到, 之前网络连接上的事件, 当然我也可以在oncreate时,判断一下网络, 再主动 调用一下本来由于接收post 事件要调用的函数

hehonghui commented 9 years ago

你的意思是在Activity注册成功之前Application实际上已经发布了一个消息,此时Actiivty就接不到这个消息。你需要的就是Sticky模式,按照这个模式发布的消息可以在任意时刻获取到,跟时序无关。对吗?

forrestpan05 commented 9 years ago

是的,我现在 网络状态改变 只在一个地方进行post, 当activity创建后, 网络状态改变可以接收到,比如此时接收到网络连接上 相应地调用 onNetworkConnect(), 进行联网获取数据 但是当网络本身就是连接上, 此时进入 activity 就不会接收到 网络状态改变的消息, 因此我需要主动调用 onNetworkConnect(), 进行联网获取数据

hehonghui commented 9 years ago

sorry,目前还没有增加这个功能的打算,你可以自己实现一下类似的功能。

forrestpan05 commented 9 years ago

可以看看android 网络状态改变的广播,activity 在注册此广播,即使在网络状态没有改变的情况下,也会收到的

551780457 commented 9 years ago

看eventbus源码分析时,竟然没看懂Sticky是什么意思,现在明白了,感觉这真是一个很妙的功能

hehonghui commented 9 years ago

@forrest-pan @551780457 已简单支持Sticky事件

551780457 commented 9 years ago

如果sticky事件可以加强一下就好了,eventbus的sticky事件只能保存一个事件,嗯,有时候不一定能满足需求 我简单改过,不过感觉太粗糙了 :(

hehonghui commented 9 years ago

@551780457 目前是很简单的支持,那天有人说了他要用,我就临时给他加的。没空弄了,有需求的可以自行处理一下源码

wurensen commented 9 years ago

看源码的时候,思考了很久不知道具体有什么应用场景需要有sticky来支持,看到这里才知道1.0.4版本加入sticky的目的。

wurensen commented 9 years ago

看了源码发现用sticky发布的事件不支持多态了(没有加入匹配策略的支持)。

hehonghui commented 9 years ago

@wurensen 恩,已发现这个问题。明天处理一下