Jeremy Liao
Jeremy Liao
> > > 如题,如果连续post同一个event,后面的会覆盖前面的。我说的覆盖指observer只能观察都后面那次post的东西,前面那次永远观察不到 > > > 现在遇到的实际问题如下 > > > 有一个界面里有一串提示性信息,相关observer中会保存传入的提示信息字符串,并更新ui。在跳转入这个界面前,我会post(null)要求复位提示信息。进入这个界面后,界面本身有初始化过程,初始化开始前会保存下当前储存的提示字符串,然后post(“初始化中...”),初始化完毕则post(之前保存下来的上一条提示信息). > > > 现在的问题是post(“初始化中...”)紧紧跟在post(null)后面,导致post(null)不会触发observer,于是提示信息永远不会复位~ > > > 个人觉得observerSticky和post应该一一对应,不能莫名其妙漏掉一个~ > > > > > > 连续post消息是不会漏掉消息的,也有相关的测试用例来保证。你这个地方的问题是你的post(null)复位操作是在进入页面之前,所以使用observer是收不到这个消息的。另外使用observerSticky只能保证收到之前发送的最后一条消息,而不会收到之前发送的所有消息 > > 虽然post(null)确实是进页面之前,但第二个post,也就是覆盖掉null的那个确实是进入页面之后,具体生命周期是`Fragment`的`onCreateView`中。`observerSticky`怎么也该保证我能收到进页面前的最后一条消息吧...
> post(null)收不到又是怎么回事呢?虽然post(null)确实是生命周期外发送的,但后续消息都是生命周期内发送的,observeSticky不是应该至少能收到最近一条生命周期外的最后一条消息吗。是不是因为生命周期几乎刚开始的阶段(onCreateView)我又post了一条消息,所以直接就把生命周期外的最后一条消息给覆盖了? 我测了一下貌似没有问题,我的测试用例: @Test public void testPostNull() throws Exception { final String key = "test_post_null"; final Wrapper counter = new Wrapper(0); final Wrapper result = new Wrapper("aaa"); LiveEventBus .get() .with(key,...
> > post(null)收不到又是怎么回事呢?虽然post(null)确实是生命周期外发送的,但后续消息都是生命周期内发送的,observeSticky不是应该至少能收到最近一条生命周期外的最后一条消息吗。是不是因为生命周期几乎刚开始的阶段(onCreateView)我又post了一条消息,所以直接就把生命周期外的最后一条消息给覆盖了? > > 我测了一下貌似没有问题,我的测试用例: > > ``` > @Test > public void testPostNull() throws Exception { > final String key = "test_post_null"; > final Wrapper counter = new...
现在没有针对消息的单独配置,只能全局设置立即接收还是active之后才接收,因为基于LiveData实现的缘故。但我会仔细考虑一下这个问题,谢谢
> 短时间内发送多个事件给同一个 observe 会出现只收到一个的问题 @JeremyLiao 贴一下相关的代码呢
> 遇到了相同问题@JeremyLiao 贴一下相关的代码呢
暂时不支持静态注册
请问有什么特殊的复现场景吗,我试了一下没有复现
> fragment中回收到两个次事件 > 01-15 16:44:58.135 28220-28220/? I/[LiveEventBus]: post: true with key: isFinishRefresh > 01-15 16:44:58.135 28220-28220/? I/[LiveEventBus]: message received: true > 01-15 16:44:58.135 28220-28220/? I/[LiveEventBus]: message received: true 是不是注册了两个接收者,贴下代码呢
可以在订阅的时候选择调用observe或者observeSticky,如果订阅的时候使用observe,则不作为黏性事件处理,如果使用observeSticky,则作为黏性事件处理