diff --git a/app/build.gradle b/app/build.gradle index ec76eb0..e322430 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,7 +6,7 @@ android { applicationId "us.spotco.malwarescanner" minSdkVersion 21 targetSdkVersion 26 - versionCode 24 + versionCode 25 versionName "2.1" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1a84004..2fe6c8f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -34,7 +34,7 @@ @@ -44,7 +44,6 @@ - diff --git a/app/src/main/java/us/spotco/malwarescanner/EventReceiver.java b/app/src/main/java/us/spotco/malwarescanner/EventReceiver.java index 053c3ca..0478572 100644 --- a/app/src/main/java/us/spotco/malwarescanner/EventReceiver.java +++ b/app/src/main/java/us/spotco/malwarescanner/EventReceiver.java @@ -50,7 +50,7 @@ public class EventReceiver extends BroadcastReceiver { e.printStackTrace(); } if (filesToScan.size() > 0) { - new MalwareScanner(null, context, false).execute(filesToScan); + new MalwareScanner(null, context, false).executeOnExecutor(Utils.getThreadPoolExecutor(), filesToScan); } } } diff --git a/app/src/main/java/us/spotco/malwarescanner/MainActivity.java b/app/src/main/java/us/spotco/malwarescanner/MainActivity.java index e50ed14..89e3ef8 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MainActivity.java +++ b/app/src/main/java/us/spotco/malwarescanner/MainActivity.java @@ -178,7 +178,7 @@ public class MainActivity extends AppCompatActivity { if (scanExternal) { filesToScan.addAll(Utils.getFilesRecursive(new File("/storage"))); } - malwareScanner.execute(filesToScan); + malwareScanner.executeOnExecutor(Utils.getThreadPoolExecutor(), filesToScan); } private void updateDatabase() { diff --git a/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java b/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java index 4b7a43b..1ea2531 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java +++ b/app/src/main/java/us/spotco/malwarescanner/MalwareScannerService.java @@ -11,7 +11,6 @@ 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; @@ -30,11 +29,7 @@ public class MalwareScannerService extends Service { @Override public final int onStartCommand(Intent intent, int flags, int startId) { - int maxTheads = Runtime.getRuntime().availableProcessors(); - if (maxTheads >= 2) { - maxTheads /= 2; - } - threadPoolExecutor = (ThreadPoolExecutor) Executors.newScheduledThreadPool(maxTheads); + threadPoolExecutor = Utils.getThreadPoolExecutor(); threadPoolExecutor.execute(new Runnable() { @Override public void run() { diff --git a/app/src/main/java/us/spotco/malwarescanner/Utils.java b/app/src/main/java/us/spotco/malwarescanner/Utils.java index 213747a..c8bc511 100644 --- a/app/src/main/java/us/spotco/malwarescanner/Utils.java +++ b/app/src/main/java/us/spotco/malwarescanner/Utils.java @@ -4,6 +4,8 @@ import android.app.ActivityManager; import android.content.Context; import java.io.File; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadPoolExecutor; import gnu.trove.set.hash.THashSet; @@ -13,6 +15,22 @@ class Utils { public final static int MAX_SCAN_SIZE_REALTIME = MAX_SCAN_SIZE / 2; //40MB public static int FILES_SCANNED = 0; + private static ThreadPoolExecutor threadPoolExecutor = null; + + public static ThreadPoolExecutor getThreadPoolExecutor() { + if (threadPoolExecutor == null) { + threadPoolExecutor = (ThreadPoolExecutor) Executors.newScheduledThreadPool(getMaxThreads()); + } + return threadPoolExecutor; + } + + public static int getMaxThreads() { + int maxTheads = Runtime.getRuntime().availableProcessors(); + if (maxTheads >= 2) { + maxTheads /= 2; + } + return maxTheads; + } public static THashSet getFilesRecursive(File root) { THashSet filesAll = new THashSet<>();