From 949a05c17a02b1d5d080a5792b8ac8f8bd8465e2 Mon Sep 17 00:00:00 2001 From: orionlee Date: Fri, 4 Jan 2019 10:15:09 -0800 Subject: [PATCH] fix #2956 - prevent ANR during some automatic feed update --- .../antennapod/core/util/FeedUpdateUtils.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/FeedUpdateUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/FeedUpdateUtils.java index afaf13390..a0195975f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/FeedUpdateUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/FeedUpdateUtils.java @@ -17,15 +17,20 @@ public class FeedUpdateUtils { private FeedUpdateUtils() {} public static void startAutoUpdate(Context context, Runnable callback) { - try { - with().pollInterval(1, TimeUnit.SECONDS) - .await() - .atMost(10, TimeUnit.SECONDS) - .until(() -> NetworkUtils.networkAvailable() && NetworkUtils.isDownloadAllowed()); - DBTasks.refreshAllFeeds(context, null, callback); - } catch (ConditionTimeoutException ignore) { - Log.d(TAG, "Blocking automatic update: no wifi available / no mobile updates allowed"); - } + // the network check is blocking for possibly a long time: so run the logic + // in a separate thread to prevent the code blocking the callers + final Runnable runnable = () -> { + try { + with().pollInterval(1, TimeUnit.SECONDS) + .await() + .atMost(10, TimeUnit.SECONDS) + .until(() -> NetworkUtils.networkAvailable() && NetworkUtils.isDownloadAllowed()); + DBTasks.refreshAllFeeds(context, null, callback); + } catch (ConditionTimeoutException ignore) { + Log.d(TAG, "Blocking automatic update: no wifi available / no mobile updates allowed"); + } + }; + new Thread(runnable).start(); } }