More threading

This commit is contained in:
Tad 2017-12-26 21:04:23 -05:00
parent 4b66afbc35
commit 4517a2253f
6 changed files with 23 additions and 11 deletions

View file

@ -6,7 +6,7 @@ android {
applicationId "us.spotco.malwarescanner" applicationId "us.spotco.malwarescanner"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 26 targetSdkVersion 26
versionCode 24 versionCode 25
versionName "2.1" versionName "2.1"
} }
buildTypes { buildTypes {

View file

@ -34,7 +34,7 @@
<receiver <receiver
android:name=".EventReceiver" android:name=".EventReceiver"
android:label="Theia Persistence" android:label="Theia Event Handler"
android:enabled="true" android:enabled="true"
android:exported="true"> android:exported="true">
<intent-filter> <intent-filter>
@ -44,7 +44,6 @@
<intent-filter> <intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" /> <action android:name="android.intent.action.PACKAGE_REPLACED" />
<action android:name="android.intent.action.PACKAGE_ADDED" /> <action android:name="android.intent.action.PACKAGE_ADDED" />
<data android:scheme="package" /> <data android:scheme="package" />
</intent-filter> </intent-filter>
</receiver> </receiver>

View file

@ -50,7 +50,7 @@ public class EventReceiver extends BroadcastReceiver {
e.printStackTrace(); e.printStackTrace();
} }
if (filesToScan.size() > 0) { if (filesToScan.size() > 0) {
new MalwareScanner(null, context, false).execute(filesToScan); new MalwareScanner(null, context, false).executeOnExecutor(Utils.getThreadPoolExecutor(), filesToScan);
} }
} }
} }

View file

@ -178,7 +178,7 @@ public class MainActivity extends AppCompatActivity {
if (scanExternal) { if (scanExternal) {
filesToScan.addAll(Utils.getFilesRecursive(new File("/storage"))); filesToScan.addAll(Utils.getFilesRecursive(new File("/storage")));
} }
malwareScanner.execute(filesToScan); malwareScanner.executeOnExecutor(Utils.getThreadPoolExecutor(), filesToScan);
} }
private void updateDatabase() { private void updateDatabase() {

View file

@ -11,7 +11,6 @@ import android.os.IBinder;
import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationCompat;
import java.io.File; import java.io.File;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import gnu.trove.set.hash.THashSet; import gnu.trove.set.hash.THashSet;
@ -30,11 +29,7 @@ public class MalwareScannerService extends Service {
@Override @Override
public final int onStartCommand(Intent intent, int flags, int startId) { public final int onStartCommand(Intent intent, int flags, int startId) {
int maxTheads = Runtime.getRuntime().availableProcessors(); threadPoolExecutor = Utils.getThreadPoolExecutor();
if (maxTheads >= 2) {
maxTheads /= 2;
}
threadPoolExecutor = (ThreadPoolExecutor) Executors.newScheduledThreadPool(maxTheads);
threadPoolExecutor.execute(new Runnable() { threadPoolExecutor.execute(new Runnable() {
@Override @Override
public void run() { public void run() {

View file

@ -4,6 +4,8 @@ import android.app.ActivityManager;
import android.content.Context; import android.content.Context;
import java.io.File; import java.io.File;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import gnu.trove.set.hash.THashSet; 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 final static int MAX_SCAN_SIZE_REALTIME = MAX_SCAN_SIZE / 2; //40MB
public static int FILES_SCANNED = 0; 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<File> getFilesRecursive(File root) { public static THashSet<File> getFilesRecursive(File root) {
THashSet<File> filesAll = new THashSet<>(); THashSet<File> filesAll = new THashSet<>();