第11章 Android的線程和線程池

1.主線程和子線程

11.2Android中的線程形態(tài)

11.2.1 AsyncTask

AsyncTask 是一個(gè)抽象的泛型類,他提供了Params,Progress和Result三個(gè)泛型參數(shù)
Async提供了4個(gè)核心方法
1.onPreExecute() 2.doInbackGround() 3.onProgressUpdate() 4.onPostExecute

11.2.2AsyncTask的工作原理

11.2.3 HandlerThread

HandlerThread繼承了Thread,他是一個(gè)可以使用handler的Thread
在run方法中通過Looper.prepare()來創(chuàng)建消息隊(duì)列,并通過Looper.loop()來開啟消息循環(huán)。這就在實(shí)際實(shí)際使用中允許在handlerThread中創(chuàng)建handler。

11.2.4IntentService intentService是一種特殊的Service,它繼承了Service并且他是一個(gè)抽象類,所以必須創(chuàng)建它的子類才能使用IntentService。IntentService可用于執(zhí)行后臺(tái)耗時(shí)的任務(wù),當(dāng)任務(wù)執(zhí)行后他自動(dòng)停止。在實(shí)現(xiàn)上IntentService封裝了handlerThread和handler

當(dāng)intentService被第一次啟動(dòng)時(shí),他的increase方法會(huì)被調(diào)用,onCreate方法會(huì)創(chuàng)建一個(gè)handlerThread,然后使用它的Looper來構(gòu)造一個(gè)Handler對(duì)象mServiceHandler,這樣通過mServicehandler發(fā)送的消息最終都會(huì)在HandlerThread中執(zhí)行,從這個(gè)角度來說,IntentService也可以用于執(zhí)行后臺(tái)任務(wù)。每次啟動(dòng)intentService,它的onStartCommend方法就會(huì)調(diào)用一次。IntentService僅僅是通過mServiceHandler發(fā)送一個(gè)消息,這個(gè)消息在handlerThread中被處理。mServiceHandler收到消息后,會(huì)將Intent對(duì)象傳遞給OnhandlerIntent方法去處理

11.3 Android中的線程池

好處
1.重用線程池中的線程,避免因?yàn)榫€程的創(chuàng)建和銷毀所帶來的性能開銷
2.能有效控制線程池中的最大并發(fā)數(shù),避免大量的線程之間因?yàn)榛ハ鄵屨枷到y(tǒng)資源而導(dǎo)致的阻塞現(xiàn)象
3.能夠?qū)€程進(jìn)行簡(jiǎn)單的管理,并提供定時(shí)執(zhí)行以及制定間隔循環(huán)執(zhí)行等功能

11.3.1 ThreadPoolExecutor

threadPoolExecutor是線程池真正實(shí)現(xiàn),他的構(gòu)造方法提供了一系列參數(shù)來配置線程池

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory)

corePoolSize 線程的核心線程數(shù)
maximumPoolSize 線程池所能容納的最大線程數(shù)
keepAliveTime 非核心線程閑置時(shí)的超時(shí)時(shí)長(zhǎng)
unit 用來是定keepAliveTime參數(shù)的時(shí)間單位
workQueue 線程池中的任務(wù)隊(duì)列
threadFactory 線程工廠,為線程池提供新線程的功能

11.3.2線程池分類

1.FixedThreadPool 線程數(shù)量固定的線程池,當(dāng)線程處于空閑狀態(tài)時(shí),他們并不會(huì)被回收
2.CachedThreadPool 他是一種線程數(shù)量不定的線程池,他只有非核心線程,最大線程數(shù)量是Integer.MAX_VALUE
3.ScheduledThreadPool 他的核心線程數(shù)量是固定的,而非核心線程數(shù)是沒有限制的。并且當(dāng)非非核心線程閑置時(shí)會(huì)被立刻回收。ScheduledThreadPool這類線程池主要用于執(zhí)行定時(shí)任務(wù)和具有固定周期的重復(fù)任務(wù)
4.singleThreadExecutor 內(nèi)部只有一個(gè)核心線程,他確保所有的任務(wù)都在用一個(gè)線程中按順序執(zhí)行。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 11.1 主線程和子線程 Android中的主線程主要處理和界面相關(guān)的事情,而子線程則往往用于執(zhí)行耗時(shí)操作,如網(wǎng)絡(luò)...
    Xerrard閱讀 436評(píng)論 0 0
  • Android中的線程 線程,在Android中是非常重要的,主線程處理UI界面,子線程處理耗時(shí)操作。如果在主線程...
    shenhuniurou閱讀 879評(píng)論 0 3
  • 從用途上來說,線程分為主線程和子線程,主線程主要處理和界面相關(guān)的事情,子線程則往往用于執(zhí)行耗時(shí)操作。 除了Thre...
    小柏不是大白閱讀 718評(píng)論 0 3
  • 前言 在Android中,線程的形態(tài)有很多種: AsyncTask封裝了線程池和Handler,主要為了方便開發(fā)者...
    AndroidMaster閱讀 454評(píng)論 0 2
  • 晚上就是想寫點(diǎn)東西,可是又不知道寫什么?,F(xiàn)在的我就連自己在想什么我都不知道,想起前兩天跟同事一起去西塘、...
    Libra蘇龍閱讀 366評(píng)論 4 0

友情鏈接更多精彩內(nèi)容