--- /home/marcel/support/lifecycle/lifecycle-livedata/src/main/java/androidx/lifecycle/ComputableLiveData.java 2020-03-23 17:03:45.426122318 +0100 +++ /home/marcel/email/app/src/main/java/androidx/lifecycle/ComputableLiveData.java 2020-06-14 11:48:36.977868184 +0200 @@ -96,13 +96,26 @@ public abstract class ComputableLiveData // as long as it is invalid, keep computing. try { T value = null; + boolean once = true; + long last = android.os.SystemClock.elapsedRealtime(); 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(); } if (computed) { mLiveData.postValue(value); } + } catch (Throwable ex) { + // java.lang.IllegalStateException: Couldn't read row xxx column yyy + eu.faircode.email.Log.e(ex); + mInvalid.set(true); } finally { // release compute lock mComputing.set(false);