diff --git a/app/src/main/java/com/fongmi/android/tv/App.java b/app/src/main/java/com/fongmi/android/tv/App.java index c08039df2..bf7f7c98b 100644 --- a/app/src/main/java/com/fongmi/android/tv/App.java +++ b/app/src/main/java/com/fongmi/android/tv/App.java @@ -36,6 +36,7 @@ import cat.ereza.customactivityoncrash.config.CaocConfig; public class App extends Application { + private final ExecutorService searchExecutor; private final ExecutorService executor; private final Handler handler; private static App instance; @@ -46,10 +47,11 @@ public class App extends Application { public App() { instance = this; + gson = new Gson(); + time = System.currentTimeMillis(); executor = Executors.newFixedThreadPool(5); + searchExecutor = Executors.newFixedThreadPool(20); handler = HandlerCompat.createAsync(Looper.getMainLooper()); - time = System.currentTimeMillis(); - gson = new Gson(); } public static App get() { @@ -76,6 +78,10 @@ public class App extends Application { return get().executor.submit(task); } + public static Future submitSearch(Runnable task) { + return get().searchExecutor.submit(task); + } + public static void execute(Runnable runnable) { get().executor.execute(runnable); } diff --git a/app/src/main/java/com/fongmi/android/tv/model/SearchTask.java b/app/src/main/java/com/fongmi/android/tv/model/SearchTask.java index 1e5cdedf0..a6b2e1bf2 100644 --- a/app/src/main/java/com/fongmi/android/tv/model/SearchTask.java +++ b/app/src/main/java/com/fongmi/android/tv/model/SearchTask.java @@ -18,7 +18,15 @@ public class SearchTask implements Callable { private final String page; private final Site site; - public SearchTask(SiteViewModel model, Site site, String keyword, boolean quick, String page) { + public static SearchTask create(SiteViewModel model, Site site, String keyword, boolean quick) { + return new SearchTask(model, site, keyword, quick, "1"); + } + + public static SearchTask create(SiteViewModel model, Site site, String keyword, boolean quick, String page) { + return new SearchTask(model, site, keyword, quick, page); + } + + private SearchTask(SiteViewModel model, Site site, String keyword, boolean quick, String page) { this.keyword = Trans.t2s(keyword); this.model = model; this.quick = quick; diff --git a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java index c6ad1b029..d176845ab 100644 --- a/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java +++ b/app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java @@ -213,11 +213,11 @@ public class SiteViewModel extends ViewModel { } public void searchContent(List sites, String keyword, boolean quick) { - //sites.forEach(site -> searchFuture.add(new SearchTask(this, site, keyword, quick, "1"))); + sites.forEach(site -> searchFuture.add(App.submitSearch(SearchTask.create(this, site, keyword, quick).run()))); } public void searchContent(Site site, String keyword, boolean quick, String page) { - execute(result, new SearchTask(this, site, keyword, quick, page)); + execute(result, SearchTask.create(this, site, keyword, quick, page)); } public void action(String key, String action) { diff --git a/app/src/mobile/java/com/fongmi/android/tv/utils/ScanTask.java b/app/src/mobile/java/com/fongmi/android/tv/utils/ScanTask.java index 1d4527749..5e4c0a2b5 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/utils/ScanTask.java +++ b/app/src/mobile/java/com/fongmi/android/tv/utils/ScanTask.java @@ -9,21 +9,20 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import java.util.concurrent.Future; import okhttp3.OkHttpClient; import okhttp3.Response; public class ScanTask { + private final List> future; private final OkHttpClient client; - - private ExecutorService executor; private Listener listener; public ScanTask(Listener listener) { this.client = OkHttp.client(1000); + this.future = new ArrayList<>(); this.listener = listener; } @@ -36,29 +35,14 @@ public class ScanTask { } public void stop() { - if (executor != null) executor.shutdownNow(); + future.forEach(f -> f.cancel(true)); OkHttp.cancel(client, "scan"); - executor = null; + future.clear(); listener = null; } - private void init() { - if (executor != null) executor.shutdownNow(); - executor = Executors.newFixedThreadPool(20); - OkHttp.cancel(client, "scan"); - } - - private void run(List items) { - try { - init(); - getDevice(items); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private void getDevice(List urls) { - for (String url : urls) executor.execute(() -> findDevice(url)); + private void run(List urls) { + for (String url : urls) future.add(App.submitSearch(() -> findDevice(url))); } private List getUrl() {