楼主遇到一个情况,就是第一次进入页面监听livedata更新数据正常,返回重新进入页面后会更新两次数据,第一次更新的数据是上一次缓存的数据,第二次才是自己需要的数据,这样就会造成页面重复刷新的问题以及浪费资源,解决方法如下
就是使用一个google大神实现的一个复写类 SingleLiveEvent代替livadata,其中的机制是用一个原子 AtomicBoolean记录一次setValue。在发送一次后在将AtomicBoolean设置为false,阻止后续前台重新触发时的数据发送。
package com.dhc.jmpos.bus.event; import android.util.Log; import java.util.concurrent.atomic.AtomicBoolean; import androidx.annotation.MainThread; import androidx.annotation.Nullable; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.Observer; public class SingleLiveEventextends MutableLiveData { private static final String TAG = "SingleLiveEvent"; private final AtomicBoolean mPending = new AtomicBoolean(false); @MainThread public void observe(LifecycleOwner owner, final Observer super T> observer) { if (hasActiveObservers()) { Log.w(TAG, "Multiple observers registered but only one will be notified of changes."); } // Observe the internal MutableLiveData super.observe(owner, new Observer () { @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); } @MainThread public void call() { setValue(null); } }



