Android开发之可以在任意页面开启主线程和使用线程池开启子线程的工具类
生活随笔
收集整理的這篇文章主要介紹了
Android开发之可以在任意页面开启主线程和使用线程池开启子线程的工具类
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
代碼很簡(jiǎn)單說(shuō)下思路,只需要使用handler通信即可,點(diǎn)擊跳轉(zhuǎn)源碼頁(yè)面鏈接🔗
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* 類(lèi)描述 : 在任意頁(yè)面進(jìn)行主線程開(kāi)啟*/ 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);//回調(diào)主線程mainThreadCallBack.onFinish();}};/*** 此方法可以在activity fragment 任意頁(yè)面進(jìn)行主線程開(kāi)啟** @param mainThreadCallBack 回調(diào)*/public void open(MainThreadCallBack mainThreadCallBack) {this.mainThreadCallBack = mainThreadCallBack;//發(fā)送消息,回調(diào)到主線程handler.sendEmptyMessage(0);} }看下開(kāi)啟主線程的方法:
MainThread.getInstance().open(new MainThreadCallBack() {@Overridepublic void onFinish() {}});在看下使用線程池開(kāi)啟子線程的方法,可點(diǎn)擊查看源碼鏈接🔗
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* 類(lèi)描述 : 線程池相關(guān),不建議使用java包裝好的線程池工具類(lèi)Executors*/ public class ThreadUtils {/*** 線程池相關(guān)參數(shù),請(qǐng)點(diǎn)擊查看{@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;}/*** 創(chuàng)建線程池** @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);} }?
總結(jié)
以上是生活随笔為你收集整理的Android开发之可以在任意页面开启主线程和使用线程池开启子线程的工具类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 理想汽车财报:2022全年营收452.9
- 下一篇: 小行星采样返回!天问二号任务已获得国家批