Optimize search thread

pull/605/head
jhengazuki 5 months ago
parent 0d87630444
commit aaa5412f7e
  1. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java
  2. 19
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/CollectActivity.java
  3. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  4. 4
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  5. 57
      app/src/main/java/com/fongmi/android/tv/utils/PauseExecutor.java
  6. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  7. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.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();
}
}

@ -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();

@ -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();
}
}

@ -1184,7 +1184,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private void startSearch(String keyword) {
mQuickAdapter.clear();
List<Site> 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();
}
}

@ -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();
}
}
}

@ -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();
}
}

@ -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();
}
}

Loading…
Cancel
Save