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

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

Android HandlerThread案例詳解

瀏覽:46日期: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() 方法來(lái)創(chuàng)建一個(gè) SingleThreadExecutor,來(lái)統(tǒng)一所有的任務(wù)到一個(gè)線程中,然后按順序執(zhí)行。其實(shí),除了這個(gè)方法之外,HandlerThread 也可以實(shí)現(xiàn)。

簡(jiǎ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 方法隱藏掉,無(wú)法調(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; }}

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

HandlerThread 運(yùn)行 start() 方法,回調(diào) run() 方法。 在 run() 方法中通過 Looper.prepare() 來(lái)創(chuàng)建消息隊(duì)列,并通過 Looper.looper() 方法來(lái)開啟消息循環(huán)。 由于 Loop.loop() 是一個(gè)死循環(huán),導(dǎo)致 run() 也是無(wú)線循環(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久久,三上悠亚国产精品一区二区三区
国产精品久久久久av电视剧| 福利一区和二区| 麻豆成全视频免费观看在线看| 欧美一级全黄| 免费在线观看一区二区三区| 黄色日韩在线| 婷婷中文字幕一区| 亚洲一本视频| 九九在线精品| 欧美肉体xxxx裸体137大胆| 精品三级国产| 国产亚洲一区| 国产色综合网| 亚洲午夜黄色| 三上悠亚国产精品一区二区三区 | 欧美精品99| 日韩精品91亚洲二区在线观看| 91久久久久| 欧美不卡高清一区二区三区| 精品一区二区三区免费看| 国产美女撒尿一区二区| 一区二区三区国产在线| 午夜亚洲一区| 六月丁香综合| 香蕉成人久久| 国产女优一区| av亚洲免费| 亚洲国产成人精品女人| 亚洲网站视频| 一级欧洲+日本+国产| 九一成人免费视频| 午夜免费一区| 国产一区91| 一级欧洲+日本+国产| 午夜欧美视频| 欧美日韩一二| 色婷婷色综合| 久久精品国产一区二区| 久久不卡日韩美女| 欧美久久一区二区三区| 亚洲一区区二区| 国产成人精品亚洲线观看| 97精品一区| 卡一精品卡二卡三网站乱码| 美女视频一区在线观看| 麻豆国产欧美一区二区三区| 欧美亚洲色图校园春色| 日本精品在线播放| 亚洲精品乱码| 亚洲精品麻豆| 国产亚洲人成a在线v网站| 久久99久久久精品欧美| 激情国产在线| 精品亚洲美女网站| 日韩天堂av| 亚洲精品成人一区| 国产欧美自拍| 国产成人黄色| 国产一区日韩欧美| 综合欧美精品| 欧美激情麻豆| 久久精品国产亚洲夜色av网站| 亚洲午夜黄色| 视频一区视频二区中文字幕| 日韩精品一区二区三区中文在线 | 日韩电影免费网址| 国精品一区二区| 免费在线成人网| 欧美日本精品| 成人亚洲一区二区| 99国产精品视频免费观看一公开| 亚洲免费毛片| 精品国产一区二| 午夜欧美在线| 国产精品天堂蜜av在线播放| 久久久久伊人| 久久国产精品成人免费观看的软件| 日韩中文字幕91| 久久精品国产福利| 欧美精品一卡| 国产精品久久久久av蜜臀| 国产精品一在线观看| 成人日韩精品| 亚洲v天堂v手机在线| 精品一区二区三区视频在线播放 | 黄色国产精品| 欧美一级二级三级视频| 在线天堂资源www在线污| 黄色成人精品网站| 欧美精品99| 亚洲精品1区| 麻豆成人在线观看| 91久久视频| 国产精品久久久久久久久久白浆| 成人羞羞在线观看网站| 亚洲欧美在线专区| 97精品国产| 日韩精品导航| 久久中文字幕二区| 国产精品视频一区二区三区综合| 久久香蕉国产| 久久精品99国产国产精| 999久久久免费精品国产| 国产亚洲人成a在线v网站| 蜜桃一区二区三区| 免费在线亚洲欧美| 亚洲综合福利| 欧美亚洲激情| 麻豆精品久久久| 免费成人在线视频观看| 麻豆网站免费在线观看| 日韩精品a在线观看91| re久久精品视频| 国产欧美一区二区精品久久久| 午夜免费一区| 国产精品久久久久久久久久妞妞| 国产精品视频一区二区三区综合 | 精品视频一区二区三区在线观看| 亚洲免费影视| 欧美gv在线| 欧美极品一区二区三区| 伊人精品久久| 日本美女一区| 青青国产精品| 国产视频亚洲| 日韩欧美三级| 美女在线视频一区| 午夜精品福利影院| 国产一区久久| 国产一区二区三区四区大秀| 日韩三区四区| 免费日韩av片| 蜜桃tv一区二区三区| 日韩精品不卡一区二区| 日本综合视频| 亚洲永久字幕| 视频一区中文| 日本免费久久| 欧美日韩视频网站| 91在线成人| 久久性天堂网| 91精品综合| 日韩高清中文字幕一区二区| 精品三级在线| 国产日韩1区| 日韩二区在线观看| 中文字幕av亚洲精品一部二部| 亚洲女同一区| 亚洲精品国产偷自在线观看| 日本在线精品| 欧美精品高清| 亚洲www啪成人一区二区| 日韩a一区二区| 国产精品久久久久蜜臀| 精品久久在线| 欧美国产中文高清| 国产精品最新| 久久av免费| 麻豆久久久久久| 久久狠狠久久| 国产精品xxx在线观看| 国产精品蜜月aⅴ在线| 日韩国产欧美一区二区三区| 蜜臀国产一区二区三区在线播放 | 亚洲午夜免费| av一区在线| 不卡福利视频| 精品网站aaa| 视频在线不卡免费观看| 日韩电影在线视频| 99精品视频精品精品视频| 日韩另类视频| 欧美在线影院| 亚洲专区视频| 国产精品中文字幕亚洲欧美 | 亚洲国产一区二区在线观看| 噜噜噜久久亚洲精品国产品小说| 亚洲一区二区动漫| 天堂va在线高清一区| 国产精选一区| 成人精品动漫一区二区三区| 色偷偷偷在线视频播放| 999国产精品永久免费视频app| 久久在线电影| 亚洲成人日韩| 中文字幕亚洲影视| 国产日韩中文在线中文字幕| 免费亚洲一区| 久久久水蜜桃av免费网站| 不卡在线一区二区| 日韩中文欧美在线| 91亚洲精品视频在线观看| 国产精品亲子伦av一区二区三区| 成人在线视频区| 国精品一区二区三区| 中文字幕av一区二区三区人| 国产精品亚洲欧美| 日韩在线看片| 免播放器亚洲| 日韩高清成人在线|