From 73be65ec2c54ed863bb3e1aa24af29b6f694ae51 Mon Sep 17 00:00:00 2001 From: Tad Date: Wed, 27 Dec 2017 16:02:37 -0500 Subject: [PATCH] Move each FileObserver onto its own thread --- .idea/misc.xml | 2 +- .../malwarescanner/MalwareScannerService.java | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 6faa303..47eabe0 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -24,7 +24,7 @@ - + diff --git a/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java b/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java index 1ea2531..488353d 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java +++ b/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java @@ -11,6 +11,7 @@ import android.os.IBinder; import android.support.v4.app.NotificationCompat; import java.io.File; +import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import gnu.trove.set.hash.THashSet; @@ -29,7 +30,10 @@ public class MalwareScannerService extends Service { @Override public final int onStartCommand(Intent intent, int flags, int startId) { - threadPoolExecutor = Utils.getThreadPoolExecutor(); + malwareMonitors.clear(); + addMalwareMonitor(Environment.getExternalStorageDirectory().toString()); + + threadPoolExecutor = (ThreadPoolExecutor) Executors.newScheduledThreadPool(Utils.getMaxThreads() + malwareMonitors.size()); threadPoolExecutor.execute(new Runnable() { @Override public void run() { @@ -37,10 +41,13 @@ public class MalwareScannerService extends Service { } }); - malwareMonitors.clear(); - addMalwareMonitor(Environment.getExternalStorageDirectory().toString()); - for (RecursiveFileObserver malwareMonitor : malwareMonitors) { - malwareMonitor.startWatching(); + for (final RecursiveFileObserver malwareMonitor : malwareMonitors) { + threadPoolExecutor.execute(new Runnable() { + @Override + public void run() { + malwareMonitor.startWatching(); + } + }); } notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);