Jeremy Liao

Results 125 comments of Jeremy Liao

这种场景会有问题:你是假设with和observe是连续调用的,但是如果我先调用with,持有这个Observable,过一段时间再去调用observe,在这期间你可能已经多次调用了setValue或者postValue,所以就起不到任何拦截作用了。 即使没有这么极端,with的调用和最后真正执行到把Observable注册上去,是有时间差的,你没法保证这段时间isChangeData一直为false,所以是有问题的

这样是有问题的,livedata和Observer的关系是一对多的关系,在注册某个Observer的时候去修改mLiveData.isChangeData会影响到其他Observer,考虑这种场景:你调用了LiveData.setValue,这个值还没有传递到Observer的时候你去注册了一个新的Observer,这会导致其他本应该收到消息的Observer收不到消息了

带有LifecycleOwner参数的接口,如observe和observeSticky,是具有生命周期感知能力的,不用手动remove,会根据Owner的生命周期自动remove,observeForever接口注册的Observer,才需要用removeObserver手动删除。也就是说,observeForever和removeObserver是配对使用的。

> [googlesamples/android-architecture-components#63](https://github.com/googlesamples/android-architecture-components/issues/63) > google的策略是使用SingleLiveEvent: > https://github.com/googlesamples/android-architecture/blob/dev-todo-mvvm-live/todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/SingleLiveEvent.java 我理解SingleLiveEvent和LiveEventBus要解决的问题是不一样的,我写了3个testcase: ``` @Test public void testSingleLiveEvent1() throws Exception { final Wrapper wrapper = new Wrapper(null); final SingleLiveEvent singleLiveEvent = new SingleLiveEvent(); rule.getActivity().runOnUiThread(new Runnable() {...

> 每一次 observe 都 new 了一个新的 SafeCastObserver,所以如果多次 observe 之后,每一个 observer 都会受到消息,这应该是有问题的 谢谢,我会在文档中强调这一点

可以使用两个分支,或者两个工程

你先用最新的1.5.7版本试下呢,我记得这个问题好像是解了的

嗯,新的版本加强了对消息的验证,并且在接收消息的时候发生错误也不会崩溃