日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Android HandlerThread案例詳解

瀏覽:42日期:2023-12-11 11:33:52

HandlerThread 顧名思義就是一種可以使用 Handler 的 Thread。日常開發(fā)中我們經(jīng)常會(huì)通過創(chuàng)建一個(gè) Thread 去執(zhí)行任務(wù),有多個(gè)任務(wù)就多創(chuàng)建幾個(gè)線程實(shí)現(xiàn),這時(shí)候可能出現(xiàn)線程同步的問題。不過有時(shí)候我們并不需要很強(qiáng)的并發(fā)性,只需保證按照順序地執(zhí)行各個(gè)任務(wù)即可,有什么好辦法實(shí)現(xiàn)呢?第一反應(yīng)想到的可能是通過 Executors.newSingleThreadExecutor() 方法來創(chuàng)建一個(gè) SingleThreadExecutor,來統(tǒng)一所有的任務(wù)到一個(gè)線程中,然后按順序執(zhí)行。其實(shí),除了這個(gè)方法之外,HandlerThread 也可以實(shí)現(xiàn)。

簡單使用

首先創(chuàng)建一個(gè) HandlerThreadActivity

public class HandlerThreadActivity extends BaseActivity {private static final String TAG = 'HandlerThreadActivity'; private Button mStartBtn; private Handler mHandler; private HandlerThread mHandlerThread; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_handler_thread);mStartBtn = findViewById(R.id.start_btn);mHandlerThread = new HandlerThread('THREAD_NAME');mHandlerThread.start();mHandler = new Handler(mHandlerThread.getLooper());mStartBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {mHandler.post(new Runnable() { @Override public void run() {Log.d(TAG, Thread.currentThread().getId() + ' ' + String.valueOf((Looper.myLooper() == Looper.getMainLooper())) + ' 任務(wù):' + this.hashCode());SystemClock.sleep(3000); }}); }}); } @Override protected void onDestroy() {super.onDestroy();mHandlerThread.quit(); }}

快速三擊按鈕,打印日志如下:

Android HandlerThread案例詳解

可以發(fā)現(xiàn),三次不同的任務(wù)按開始的順序執(zhí)行,而且是運(yùn)行在子線程中,那到底是怎么實(shí)現(xiàn)的呢?

源碼解析

public class HandlerThread extends Thread { int mPriority; int mTid = -1; Looper mLooper; private @Nullable Handler mHandler; public HandlerThread(String name) {super(name);mPriority = Process.THREAD_PRIORITY_DEFAULT; } public HandlerThread(String name, int priority) {super(name);mPriority = priority; } protected void onLooperPrepared() { } @Override public void run() {// 獲取線程 idmTid = Process.myTid();//構(gòu)建一個(gè) LooperLooper.prepare();synchronized (this) { mLooper = Looper.myLooper(); notifyAll();}//設(shè)置線程優(yōu)先級(jí)Process.setThreadPriority(mPriority);onLooperPrepared();Looper.loop();// Looper 循環(huán)mTid = -1; } // 獲取當(dāng)前線程的 Looper, public Looper getLooper() {if (!isAlive()) { return null;} synchronized (this) { while (isAlive() && mLooper == null) {try { wait();} catch (InterruptedException e) {} }}return mLooper; } /** * @return a shared {@link Handler} associated with this thread * @hide 方法隱藏掉,無法調(diào)用 */ @NonNull public Handler getThreadHandler() {if (mHandler == null) { mHandler = new Handler(getLooper());}return mHandler; } //線程退出方法,主要是調(diào)用 Looper.quit() 方法,不然一直在循環(huán) public boolean quit() {Looper looper = getLooper();if (looper != null) { looper.quit(); return true;}return false; } //同上,不過這個(gè)方法會(huì)把消息隊(duì)列中的已有消息處理完才會(huì)安全地退出 public boolean quitSafely() {Looper looper = getLooper();if (looper != null) { looper.quitSafely(); return true;}return false; } public int getThreadId() {return mTid; }}

通讀下來,如果熟悉 Handler 原理的同學(xué)大概就明白 HandlerThread 的機(jī)制了:

HandlerThread 運(yùn)行 start() 方法,回調(diào) run() 方法。 在 run() 方法中通過 Looper.prepare() 來創(chuàng)建消息隊(duì)列,并通過 Looper.looper() 方法來開啟消息循環(huán)。 由于 Loop.loop() 是一個(gè)死循環(huán),導(dǎo)致 run() 也是無線循環(huán),因此當(dāng)我們不需要使用 HandlerThread 的時(shí)候,要調(diào)用它的 quit() 方法或者 quiteSafely() 方法。

到此這篇關(guān)于Android HandlerThread案例詳解的文章就介紹到這了,更多相關(guān)Android HandlerThread內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲一区二区免费在线观看| 美美哒免费高清在线观看视频一区二区| 国产欧洲在线| 国产欧美日韩一区二区三区在线| 快she精品国产999| 国产精品毛片| 在线观看免费一区二区| 成人精品天堂一区二区三区| 成人一区不卡| 国产v日韩v欧美v| 电影91久久久| 国产成人免费视频网站视频社区| 国产精品久久久久久av公交车| 日韩影片在线观看| 亚洲影视一区二区三区| 免费看日韩精品| 老牛影视一区二区三区| 欧美高清一区| 亚洲激情精品| 鲁大师影院一区二区三区| 爽好久久久欧美精品| 日韩精品一卡二卡三卡四卡无卡| 午夜一级久久| 一区二区三区网站| 亚洲欧洲日韩| 国产亚洲一区| 久久免费精品| 成人黄色av| 久久国产日韩| 亚洲一级在线| 日韩av电影一区| 欧美激情福利| 国产精品久久久网站| 成人午夜在线| 激情欧美丁香| 亚洲精选91| 国产精品资源| 丝袜诱惑一区二区| 91精品1区| 日韩三级精品| 美女视频免费精品| 香蕉视频亚洲一级| 香蕉久久久久久久av网站| 91成人在线精品视频| 久久精品伊人| 成人va天堂| 麻豆91精品| 日韩精品亚洲专区| 风间由美中文字幕在线看视频国产欧美| 日韩欧美精品| 亚洲伊人精品酒店| 麻豆国产精品视频| 一区二区三区四区在线看| 巨乳诱惑日韩免费av| 欧美视频精品全部免费观看| 麻豆成人综合网| 久久人人精品| 日韩成人午夜精品| 91亚洲人成网污www| 日韩视频一区| 牛牛精品成人免费视频| 欧美一级精品| 日韩一区二区三区在线看| 老司机免费视频一区二区三区| 日韩高清中文字幕一区二区| 亚洲天堂av资源在线观看| 精品午夜av| 亚洲综合国产| 国产精品多人| 好看不卡的中文字幕| 国产剧情在线观看一区| 香蕉久久精品| 国产精品夜夜夜| 欧美日韩国产综合网| 美腿丝袜亚洲一区| 亚洲综合国产| 色婷婷色综合| 久久最新视频| 国产不卡人人| 青草av.久久免费一区| 今天的高清视频免费播放成人| 91成人在线| av亚洲免费| 久久不见久久见免费视频7 | 国产激情一区| 久久国产精品久久久久久电车 | 国产黄大片在线观看| 亚洲精品人人| 国产伊人精品| 成人片免费看| 美女视频一区在线观看| 少妇精品久久久一区二区三区| 久久精品免费一区二区三区| 麻豆国产欧美一区二区三区| 三级久久三级久久久| 99精品视频精品精品视频| 国产精品成人3p一区二区三区| 噜噜噜躁狠狠躁狠狠精品视频| 婷婷精品久久久久久久久久不卡| 国产一区二区三区探花| 蜜臀av一区二区在线免费观看| 四虎国产精品免费观看| 免费人成网站在线观看欧美高清| 欧美亚洲国产激情| 国产欧美日韩在线观看视频 | 男女男精品视频网| 岛国精品一区| 精品国产欧美日韩一区二区三区| 日韩av一区二区在线影视| 日韩精品专区| 日本精品国产| 午夜久久tv| 日韩成人a**站| 日日夜夜免费精品视频| 欧美日韩中文一区二区| 超级白嫩亚洲国产第一| 中文一区一区三区免费在线观| 精品国内亚洲2022精品成人| 蜜桃久久精品一区二区| 四虎884aa成人精品最新| 国产精品白丝久久av网站| 亚洲综合福利| 久久国产直播| 欧美日韩一区二区三区不卡视频 | 伊人网在线播放| 日韩av网站在线观看| 国产亚洲精品v| 动漫av一区| 欧美久久精品| 免费看日韩精品| 国产综合精品| 国产一区二区三区黄网站| 国产欧美69| 亚洲精品欧洲| 久久大逼视频| 午夜国产一区二区| 特黄毛片在线观看| 精品三级国产| 国产精品资源| 日韩av一区二区三区四区| 一区二区国产在线观看| 国产专区一区| 久久伊人国产| 国产日韩一区二区三区在线播放| 一二三区精品| 亚洲免费激情| 欧美亚洲国产精品久久| 日韩影院二区| 高清av一区| 国产精品亚洲产品| 国产亚洲一区二区三区不卡| 中文字幕亚洲影视| 亚洲伊人影院| 免费日韩av片| 亚洲在线国产日韩欧美| 国产精品丝袜xxxxxxx| 悠悠资源网久久精品| 99久久亚洲精品蜜臀| 色偷偷色偷偷色偷偷在线视频| 久久99国产精品视频| 国产精品免费大片| 国产精品成人3p一区二区三区| 欧美日韩xxxx| 蜜桃91丨九色丨蝌蚪91桃色 | 久久精品免费看| 日韩精品欧美| 日韩欧美精品| 日韩欧美精品| 亚洲精品.com| 国产在线日韩| 99热精品在线观看| 日韩欧美在线中字| 久久99伊人| 亚洲精品精选| 一区二区三区国产在线| 日韩欧美中文在线观看| 91精品日本| 开心激情综合| 日韩av二区| 午夜在线播放视频欧美| 一区二区国产在线观看| 欧美一级一区| 久久av资源| 日韩欧美视频专区| 婷婷激情综合| 婷婷国产精品| 中文字幕日韩亚洲| 国产精品乱战久久久| 国产成人免费视频网站视频社区| 综合日韩av| 九九久久电影| 一区二区国产在线观看| 中文字幕亚洲精品乱码| 欧美激情国产在线| 国产日韩综合| 奇米亚洲欧美| 日韩欧美精品| 天使萌一区二区三区免费观看| 中文一区一区三区免费在线观 | 亚洲ab电影|