From aaa5412f7ec2d95c3a8b9186cd1f5c1b56e96ec0 Mon Sep 17 00:00:00 2001 From: jhengazuki Date: Thu, 30 Oct 2025 01:27:50 +0800 Subject: [PATCH] Optimize search thread --- .../android/tv/ui/activity/CastActivity.java | 2 +- .../tv/ui/activity/CollectActivity.java | 19 ++----- .../android/tv/ui/activity/LiveActivity.java | 2 +- .../android/tv/ui/activity/VideoActivity.java | 4 +- .../android/tv/utils/PauseExecutor.java | 57 ------------------- .../android/tv/ui/activity/LiveActivity.java | 2 +- .../android/tv/ui/activity/VideoActivity.java | 2 +- 7 files changed, 10 insertions(+), 78 deletions(-) delete mode 100644 app/src/main/java/com/fongmi/android/tv/utils/PauseExecutor.java diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java index a268ce93a..59eb39fdd 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java @@ -549,12 +549,12 @@ public class CastActivity extends BaseActivity implements CustomKeyDownVod.Liste @Override protected void onDestroy() { - super.onDestroy(); mClock.release(); mPlayers.release(); unbindService(this); PlaybackService.stop(); mService.bindRealPlayer(null); App.removeCallbacks(mR1, mR2); + super.onDestroy(); } } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CollectActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CollectActivity.java index b70e8e1df..c767f8837 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CollectActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CollectActivity.java @@ -30,19 +30,20 @@ import com.fongmi.android.tv.model.SiteViewModel; import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.fragment.CollectFragment; import com.fongmi.android.tv.ui.presenter.CollectPresenter; -import com.fongmi.android.tv.utils.PauseExecutor; import com.fongmi.android.tv.utils.ResUtil; import com.google.gson.reflect.TypeToken; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; public class CollectActivity extends BaseActivity { private ActivityCollectBinding mBinding; private ArrayObjectAdapter mAdapter; + private ExecutorService mExecutor; private SiteViewModel mViewModel; - private PauseExecutor mExecutor; private View mOldView; public static void start(Activity activity, String keyword) { @@ -128,8 +129,8 @@ public class CollectActivity extends BaseActivity { if (sites.isEmpty()) return; mAdapter.add(Collect.all()); if (mExecutor != null) stop(); + mExecutor = Executors.newCachedThreadPool(); mBinding.pager.getAdapter().notifyDataSetChanged(); - mExecutor = new PauseExecutor(10, sites.size()); mBinding.result.setText(getString(R.string.collect_result, getKeyword())); for (Site site : sites) mExecutor.execute(() -> search(site)); } @@ -170,18 +171,6 @@ public class CollectActivity extends BaseActivity { } }; - @Override - protected void onResume() { - super.onResume(); - if (mExecutor != null) mExecutor.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - if (mExecutor != null) mExecutor.pause(); - } - @Override protected void onBackInvoked() { super.onBackInvoked(); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 719aca2a7..7a19895cf 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -1053,12 +1053,12 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick @Override protected void onDestroy() { - super.onDestroy(); mPlayers.release(); Source.get().exit(); PlaybackService.stop(); mViewModel.url.removeObserver(mObserveUrl); mViewModel.epg.removeObserver(mObserveEpg); App.removeCallbacks(mR0, mR1, mR3, mR3, mR4); + super.onDestroy(); } } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index e31937fbb..a50334e7c 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -1184,7 +1184,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List private void startSearch(String keyword) { mQuickAdapter.clear(); List sites = new ArrayList<>(); - mExecutor = Executors.newFixedThreadPool(10); + mExecutor = Executors.newCachedThreadPool(); for (Site site : VodConfig.get().getSites()) if (isPass(site)) sites.add(site); for (Site site : sites) mExecutor.execute(() -> search(site, keyword)); } @@ -1437,7 +1437,6 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List @Override protected void onDestroy() { - super.onDestroy(); stopSearch(); saveHistory(); mClock.release(); @@ -1449,5 +1448,6 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List mViewModel.result.removeObserver(mObserveDetail); mViewModel.player.removeObserver(mObservePlayer); mViewModel.search.removeObserver(mObserveSearch); + super.onDestroy(); } } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/PauseExecutor.java b/app/src/main/java/com/fongmi/android/tv/utils/PauseExecutor.java deleted file mode 100644 index cbc344349..000000000 --- a/app/src/main/java/com/fongmi/android/tv/utils/PauseExecutor.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.fongmi.android.tv.utils; - -import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.RejectedExecutionHandler; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.Condition; -import java.util.concurrent.locks.ReentrantLock; - -public class PauseExecutor extends ThreadPoolExecutor { - - private final ReentrantLock pauseLock; - private final Condition condition; - private boolean isPaused; - - public PauseExecutor(int corePoolSize, int queueCapacity) { - this(corePoolSize, queueCapacity, new ThreadPoolExecutor.AbortPolicy()); - } - - public PauseExecutor(int corePoolSize, int queueCapacity, RejectedExecutionHandler handler) { - super(corePoolSize, corePoolSize, 0, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(queueCapacity), handler); - pauseLock = new ReentrantLock(); - condition = pauseLock.newCondition(); - } - - @Override - protected void beforeExecute(Thread t, Runnable r) { - super.beforeExecute(t, r); - pauseLock.lock(); - try { - while (isPaused) condition.await(); - } catch (InterruptedException ie) { - t.interrupt(); - } finally { - pauseLock.unlock(); - } - } - - public void pause() { - pauseLock.lock(); - try { - isPaused = true; - } finally { - pauseLock.unlock(); - } - } - - public void resume() { - pauseLock.lock(); - try { - isPaused = false; - condition.signalAll(); - } finally { - pauseLock.unlock(); - } - } -} \ No newline at end of file diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 922c52b17..98444bf32 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -1158,12 +1158,12 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener @Override protected void onDestroy() { - super.onDestroy(); mPlayers.release(); Source.get().exit(); PlaybackService.stop(); App.removeCallbacks(mR1, mR2, mR3); mViewModel.url.removeObserver(mObserveUrl); mViewModel.epg.removeObserver(mObserveEpg); + super.onDestroy(); } } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 2e55229b6..b75836ff4 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -1682,7 +1682,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo @Override protected void onDestroy() { - super.onDestroy(); stopSearch(); saveHistory(); mClock.release(); @@ -1695,5 +1694,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo mViewModel.result.removeObserver(mObserveDetail); mViewModel.player.removeObserver(mObservePlayer); mViewModel.search.removeObserver(mObserveSearch); + super.onDestroy(); } }