Optimize search thread

fongmi
jhengazuki 3 months ago
parent 29600c500a
commit 585b195110
  1. 15
      app/src/main/java/com/fongmi/android/tv/player/Source.java
  2. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  3. 20
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java

@ -1,6 +1,5 @@
package com.fongmi.android.tv.player;
import com.fongmi.android.tv.Constant;
import com.fongmi.android.tv.bean.Channel;
import com.fongmi.android.tv.bean.Episode;
import com.fongmi.android.tv.bean.Flag;
@ -65,13 +64,13 @@ public class Source {
}
public void parse(List<Flag> flags) throws Exception {
for (Flag flag : flags) {
ExecutorService executor = Executors.newFixedThreadPool(Constant.THREAD_POOL);
List<Callable<List<Episode>>> items = new ArrayList<>();
Iterator<Episode> iterator = flag.getEpisodes().iterator();
while (iterator.hasNext()) addCallable(iterator, items);
for (Future<List<Episode>> future : executor.invokeAll(items, 30, TimeUnit.SECONDS)) flag.getEpisodes().addAll(future.get());
executor.shutdownNow();
try (ExecutorService executor = Executors.newCachedThreadPool()) {
for (Flag flag : flags) {
List<Callable<List<Episode>>> items = new ArrayList<>();
Iterator<Episode> iterator = flag.getEpisodes().iterator();
while (iterator.hasNext()) addCallable(iterator, items);
for (Future<List<Episode>> future : executor.invokeAll(items, 30, TimeUnit.SECONDS)) flag.getEpisodes().addAll(future.get());
}
}
}

@ -1324,7 +1324,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private void startSearch(String keyword) {
mQuickAdapter.clear();
List<Site> sites = new ArrayList<>();
mExecutor = Executors.newFixedThreadPool(20);
mExecutor = Executors.newCachedThreadPool();
for (Site item : VodConfig.get().getSites()) if (isPass(item)) sites.add(item);
for (Site site : sites) mExecutor.execute(() -> search(site, keyword));
}

@ -29,20 +29,21 @@ import com.fongmi.android.tv.ui.adapter.CollectAdapter;
import com.fongmi.android.tv.ui.adapter.SearchAdapter;
import com.fongmi.android.tv.ui.base.BaseFragment;
import com.fongmi.android.tv.ui.custom.CustomScroller;
import com.fongmi.android.tv.utils.PauseExecutor;
import com.fongmi.android.tv.utils.ResUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CollectFragment extends BaseFragment implements MenuProvider, CollectAdapter.OnClickListener, SearchAdapter.OnClickListener, CustomScroller.Callback {
private FragmentCollectBinding mBinding;
private CollectAdapter mCollectAdapter;
private SearchAdapter mSearchAdapter;
private ExecutorService mExecutor;
private CustomScroller mScroller;
private SiteViewModel mViewModel;
private PauseExecutor mExecutor;
private List<Site> sites;
public static CollectFragment newInstance(String keyword) {
@ -118,8 +119,7 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle
private void search() {
if (sites.isEmpty()) return;
if (mExecutor != null) mExecutor.shutdownNow();
mExecutor = new PauseExecutor(20, sites.size());
mExecutor = Executors.newCachedThreadPool();
mCollectAdapter.setItems(List.of(Collect.all()), () -> {
for (Site site : sites) mExecutor.execute(() -> search(site, getKeyword()));
});
@ -185,18 +185,6 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle
return true;
}
@Override
public void onResume() {
super.onResume();
if (mExecutor != null) mExecutor.resume();
}
@Override
public void onPause() {
super.onPause();
if (mExecutor != null) mExecutor.pause();
}
@Override
public void onHiddenChanged(boolean hidden) {
if (hidden) requireActivity().removeMenuProvider(this);

Loading…
Cancel
Save