android ViewModel Obsever 被多次回调?
ViewModel 极大的方便了我们的开发,但是 activity被回收在重新创建,由于VIewModel的生命周期机制,Obser的回调会被多次执行,显而易见不是我们想看到的,但是站在巨人的肩膀上,处理方式也很简单,使用谷歌大神的方案,SingleLiveEvent 代替MutableLiveData即可。SingleLiveEvent 具体代码:public class SingleLiveE
·
ViewModel 极大的方便了我们的开发,但是 activity被回收在重新创建,由于VIewModel的生命周期机制,Obser的回调会被多次执行,显而易见不是我们想看到的,但是站在巨人的肩膀上,处理方式也很简单,使用谷歌大神的方案,SingleLiveEvent 代替 MutableLiveData即可。SingleLiveEvent 具体代码:
public class SingleLiveEvent<T> extends MutableLiveData<T> { private final AtomicBoolean mPending = new AtomicBoolean(false); @Override public void observe(@NonNull LifecycleOwner owner, @NonNull final Observer<? super T> observer) { super.observe(owner, new Observer<T>() { @Override public void onChanged(@Nullable T t) { if (mPending.compareAndSet(true, false)) { observer.onChanged(t); } } }); } @MainThread public void setValue(@Nullable T t) { mPending.set(true); super.setValue(t); } /** * Used for cases where T is Void, to make calls cleaner. */ @MainThread public void call() { setValue(null); } }
主要思想是定义一个标记, 在setvalue 时 设置标记 为true,监听变化回调时,置为flase,这样 回调监听 只会在setvalue时触发,具体思想参考SingleLiveEvent。
更多推荐
所有评论(0)