diff --git a/app/src/main/java/androidx/lifecycle/ComputableLiveData.kt b/app/src/main/java/androidx/lifecycle/ComputableLiveData.kt index 94aa8d7f72..ebdb5de278 100644 --- a/app/src/main/java/androidx/lifecycle/ComputableLiveData.kt +++ b/app/src/main/java/androidx/lifecycle/ComputableLiveData.kt @@ -69,13 +69,26 @@ constructor( // as long as it is invalid, keep computing. try { var value: T? = null + var once = true; + var last = android.os.SystemClock.elapsedRealtime() while (invalid.compareAndSet(true, false)) { + var now = android.os.SystemClock.elapsedRealtime() + if (value != null && (once || last + 2500 < now)) { + eu.faircode.email.Log.i(liveData.toString() + " post once=" + once + " age=" + (now - last) + " ms") + once = false; + last = now; + liveData.postValue(value); + } computed = true value = compute() } if (computed) { liveData.postValue(value) } + } catch (ex: Throwable) { + // java.lang.IllegalStateException: Couldn't read row xxx column yyy + eu.faircode.email.Log.e(ex); + invalid.set(true); } finally { // release compute lock computing.set(false)