From 1aec28a4e1413ef517bab6bc9f7b0127a76cd9a1 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Mon, 7 Mar 2016 09:40:23 -0600 Subject: [PATCH] Single threaded sync executor with error reporting --- build.gradle | 2 +- .../java/org/tasks/sync/SyncExecutor.java | 20 +++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index c0fc38d14..5e6d2ca72 100644 --- a/build.gradle +++ b/build.gradle @@ -27,7 +27,7 @@ android { buildToolsVersion "23.0.2" defaultConfig { - versionCode 400 + versionCode 401 versionName "4.8.11" minSdkVersion 14 targetSdkVersion 23 diff --git a/src/main/java/org/tasks/sync/SyncExecutor.java b/src/main/java/org/tasks/sync/SyncExecutor.java index edcff6a14..2d9972c15 100644 --- a/src/main/java/org/tasks/sync/SyncExecutor.java +++ b/src/main/java/org/tasks/sync/SyncExecutor.java @@ -1,7 +1,10 @@ package org.tasks.sync; +import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.todoroo.astrid.sync.SyncResultCallback; +import org.tasks.analytics.Tracker; + import java.util.concurrent.ExecutorService; import java.util.concurrent.SynchronousQueue; import java.util.concurrent.ThreadPoolExecutor; @@ -9,18 +12,21 @@ import java.util.concurrent.TimeUnit; import javax.inject.Inject; +import timber.log.Timber; + +import static java.util.concurrent.Executors.newSingleThreadExecutor; import static java.util.concurrent.ThreadPoolExecutor.DiscardPolicy; public class SyncExecutor { - private final ExecutorService executor = new ThreadPoolExecutor( - 0, Integer.MAX_VALUE, - 60L, TimeUnit.SECONDS, - new SynchronousQueue(), - new DiscardPolicy()); + private final ExecutorService executor = newSingleThreadExecutor( + new ThreadFactoryBuilder().setNameFormat("sync-executor-%d").build()); + + private final Tracker tracker; @Inject - public SyncExecutor() { + public SyncExecutor(Tracker tracker) { + this.tracker = tracker; } public void execute(final SyncResultCallback callback, final Runnable command) { @@ -30,6 +36,8 @@ public class SyncExecutor { try { command.run(); } catch (Exception e) { + Timber.e(e, e.getMessage()); + tracker.reportException(e); executor.shutdownNow(); callback.finished(); }