diff --git a/app/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java b/app/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java index ed7189967..41ed2f074 100644 --- a/app/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java +++ b/app/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java @@ -33,9 +33,12 @@ public class AndroidTaskRunner implements TaskRunner { private final LinkedList activeTasks; + private final HashMap taskToAsyncTask; + public AndroidTaskRunner() { activeTasks = new LinkedList<>(); + taskToAsyncTask = new HashMap<>(); } @Provides @@ -54,8 +57,9 @@ public class AndroidTaskRunner implements TaskRunner @Override public void publishProgress(Task task, int progress) { - for (CustomAsyncTask asyncTask : activeTasks) - if (asyncTask.getTask() == task) asyncTask.publish(progress); + CustomAsyncTask asyncTask = taskToAsyncTask.get(task); + if(asyncTask == null) return; + asyncTask.publish(progress); } private class CustomAsyncTask extends AsyncTask @@ -89,12 +93,14 @@ public class AndroidTaskRunner implements TaskRunner { task.onPostExecute(); activeTasks.remove(this); + taskToAsyncTask.remove(task); } @Override protected void onPreExecute() { activeTasks.add(this); + taskToAsyncTask.put(task, this); task.onPreExecute(); }