Android开发之可以在任意页面开启主线程和使用线程池开启子线程的工具类
生活随笔
收集整理的這篇文章主要介紹了
Android开发之可以在任意页面开启主线程和使用线程池开启子线程的工具类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
代碼很簡單說下思路,只需要使用handler通信即可,點擊跳轉源碼頁面鏈接🔗
package cn.xiayiye5.xiayiye5library.thread;import android.os.Handler; import android.os.Looper; import android.os.Message;import androidx.annotation.NonNull;import cn.xiayiye5.xiayiye5library.inter.MainThreadCallBack;/*** @author : xiayiye5* @date : 2021/1/18 10:42* 類描述 : 在任意頁面進行主線程開啟*/ public class MainThread {private MainThreadCallBack mainThreadCallBack;private static final MainThread MAIN_THREAD = new MainThread();private MainThread() {}public static MainThread getInstance() {return MAIN_THREAD;}private final Handler handler = new Handler(Looper.getMainLooper()) {@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);//回調主線程mainThreadCallBack.onFinish();}};/*** 此方法可以在activity fragment 任意頁面進行主線程開啟** @param mainThreadCallBack 回調*/public void open(MainThreadCallBack mainThreadCallBack) {this.mainThreadCallBack = mainThreadCallBack;//發送消息,回調到主線程handler.sendEmptyMessage(0);} }看下開啟主線程的方法:
MainThread.getInstance().open(new MainThreadCallBack() {@Overridepublic void onFinish() {}});在看下使用線程池開啟子線程的方法,可點擊查看源碼鏈接🔗
package cn.xiayiye5.xiayiye5library.utils;import java.util.concurrent.BlockingQueue; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit;/*** @author : xiayiye5* @date : 2021/1/18 10:12* 類描述 : 線程池相關,不建議使用java包裝好的線程池工具類Executors*/ public class ThreadUtils {/*** 線程池相關參數,請點擊查看{@link android.os.AsyncTask}*/private static final int CORE_POOL_SIZE = Runtime.getRuntime().availableProcessors();private static final int MAXI_MUM_POOL_SIZE = CORE_POOL_SIZE * 2 + 1;private static final long KEEP_ALIVE_TIME = 10;private static final TimeUnit UNIT = TimeUnit.HOURS;private static final BlockingQueue<Runnable> WORK_QUEUE = new LinkedBlockingDeque<>(10);private static final ThreadFactory THREAD_FACTORY = Executors.defaultThreadFactory();private static final RejectedExecutionHandler HANDLER = new ThreadPoolExecutor.AbortPolicy();private static final ThreadPoolExecutor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXI_MUM_POOL_SIZE, KEEP_ALIVE_TIME, UNIT, WORK_QUEUE, THREAD_FACTORY, HANDLER);private ThreadUtils() {}private static final ThreadUtils THREAD_UTILS = new ThreadUtils();public static ThreadUtils getInstance() {return THREAD_UTILS;}/*** 創建線程池** @param runnable runnable接口*/public void createThread(Runnable runnable) {THREAD_POOL_EXECUTOR.execute(runnable);}/*** 移除線程池** @param runnable runnable接口*/public void removeThread(Runnable runnable) {THREAD_POOL_EXECUTOR.remove(runnable);} }?
總結
以上是生活随笔為你收集整理的Android开发之可以在任意页面开启主线程和使用线程池开启子线程的工具类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理想汽车财报:2022全年营收452.9
- 下一篇: Android开发之通过反射获取全局的a