From 257d27b2ca530470dbe7f4f0db97742924c76b52 Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 29 Jun 2019 21:34:26 +0200 Subject: [PATCH] Periodically post available live data, even when invalidated --- .../java/androidx/lifecycle/ComputableLiveData.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/src/main/java/androidx/lifecycle/ComputableLiveData.java b/app/src/main/java/androidx/lifecycle/ComputableLiveData.java index 837a35dbf9..b82566d6ad 100644 --- a/app/src/main/java/androidx/lifecycle/ComputableLiveData.java +++ b/app/src/main/java/androidx/lifecycle/ComputableLiveData.java @@ -16,6 +16,8 @@ package androidx.lifecycle; +import android.os.SystemClock; + import androidx.annotation.MainThread; import androidx.annotation.NonNull; import androidx.annotation.RestrictTo; @@ -89,14 +91,22 @@ public abstract class ComputableLiveData { @Override public void run() { boolean computed; + long age; 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 { + age = SystemClock.elapsedRealtime(); T value = null; while (mInvalid.compareAndSet(true, false)) { + long now = SystemClock.elapsedRealtime(); + if (age + 1500 < now && value != null) { + eu.faircode.email.Log.i(mLiveData + " post age=" + (now - age)); + age = now; + mLiveData.postValue(value); + } computed = true; value = compute(); }