--- /home/marcel/support/lifecycle/lifecycle-livedata/src/main/java/androidx/lifecycle/ComputableLiveData.java 2019-07-27 12:47:44.348985792 +0200 +++ app/src/main/java/androidx/lifecycle/ComputableLiveData.java 2019-08-14 10:25:21.881453609 +0200 @@ -89,14 +89,25 @@ public abstract class ComputableLiveData @Override public void run() { boolean computed; + boolean once; + long last; do { computed = false; // compute can happen only in 1 thread but no reason to lock others. if (mComputing.compareAndSet(false, true)) { // as long as it is invalid, keep computing. try { + once = true; + last = android.os.SystemClock.elapsedRealtime(); T value = null; while (mInvalid.compareAndSet(true, false)) { + long now = android.os.SystemClock.elapsedRealtime(); + if (value != null && (once || last + 2500 < now)) { + eu.faircode.email.Log.i(mLiveData + " post once=" + once + " age=" + (now - last) + " ms"); + once = false; + last = now; + mLiveData.postValue(value); + } computed = true; value = compute(); }