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 2f75d38e6..d007ebd39 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 @@ -27,21 +27,19 @@ import com.fongmi.android.tv.databinding.ActivityCollectBinding; import com.fongmi.android.tv.model.SiteViewModel; import com.fongmi.android.tv.ui.fragment.CollectFragment; import com.fongmi.android.tv.ui.presenter.CollectPresenter; -import com.fongmi.android.tv.utils.PausableThreadPoolExecutor; +import com.fongmi.android.tv.utils.PauseThreadPoolExecutor; 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; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; public class CollectActivity extends BaseActivity { + private PauseThreadPoolExecutor mExecutor; private ActivityCollectBinding mBinding; private ArrayObjectAdapter mAdapter; - private PausableThreadPoolExecutor mExecutor; private SiteViewModel mViewModel; private PageAdapter mPageAdapter; private List mSites; @@ -126,7 +124,7 @@ public class CollectActivity extends BaseActivity { mPageAdapter.notifyDataSetChanged(); int core = Runtime.getRuntime().availableProcessors(); int corePoolSize = Math.max(Constant.THREAD_POOL, core); - mExecutor = new PausableThreadPoolExecutor(corePoolSize, corePoolSize, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue()); + mExecutor = new PauseThreadPoolExecutor(corePoolSize, corePoolSize, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>()); mBinding.result.setText(getString(R.string.collect_result, getKeyword())); for (Site site : mSites) mExecutor.execute(() -> search(site)); } @@ -158,24 +156,21 @@ public class CollectActivity extends BaseActivity { } @Override - public void onBackPressed() { - super.onBackPressed(); - if (mExecutor == null) return; - mExecutor.shutdownNow(); + protected void onResume() { + super.onResume(); + if (mExecutor != null) mExecutor.resume(); } @Override protected void onPause() { super.onPause(); - if (mExecutor == null) return; - mExecutor.pause(); + if (mExecutor != null) mExecutor.pause(); } @Override - protected void onResume() { - super.onResume(); - if (mExecutor == null) return; - mExecutor.resume(); + public void onBackPressed() { + super.onBackPressed(); + if (mExecutor != null) mExecutor.shutdownNow(); } class PageAdapter extends FragmentStatePagerAdapter { diff --git a/app/src/main/java/com/fongmi/android/tv/utils/PausableThreadPoolExecutor.java b/app/src/main/java/com/fongmi/android/tv/utils/PauseThreadPoolExecutor.java similarity index 67% rename from app/src/main/java/com/fongmi/android/tv/utils/PausableThreadPoolExecutor.java rename to app/src/main/java/com/fongmi/android/tv/utils/PauseThreadPoolExecutor.java index f048f95bb..aa30fb1fc 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/PausableThreadPoolExecutor.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/PauseThreadPoolExecutor.java @@ -6,20 +6,23 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; -public class PausableThreadPoolExecutor extends ThreadPoolExecutor { +public class PauseThreadPoolExecutor extends ThreadPoolExecutor { + + private final ReentrantLock pauseLock; + private final Condition condition; private boolean isPaused; - private ReentrantLock pauseLock = new ReentrantLock(); - private Condition unpaused = pauseLock.newCondition(); - public PausableThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue) { + public PauseThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue); + pauseLock = new ReentrantLock(); + condition = pauseLock.newCondition(); } protected void beforeExecute(Thread t, Runnable r) { super.beforeExecute(t, r); pauseLock.lock(); try { - while (isPaused) unpaused.await(); + while (isPaused) condition.await(); } catch (InterruptedException ie) { t.interrupt(); } finally { @@ -40,7 +43,7 @@ public class PausableThreadPoolExecutor extends ThreadPoolExecutor { pauseLock.lock(); try { isPaused = false; - unpaused.signalAll(); + condition.signalAll(); } finally { pauseLock.unlock(); }