Android 的線程和線程池
在南召等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供網(wǎng)站制作、成都網(wǎng)站建設 網(wǎng)站設計制作按需定制網(wǎng)站,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,品牌網(wǎng)站設計,成都全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站制作,南召網(wǎng)站建設費用合理。從用途上分,線程分為主線程和子線程;主線程主要處理和界面相關的事情,子線程則往往用于耗時操作。
主線程和子線程
主線程是指進程所擁有的線程。Android 中主線程交 UI 線程,主要作用是運行四大組件以及處理它們和用戶的交互;子線程的作業(yè)則是執(zhí)行耗時任務。
Android 中的線程形態(tài)
1、AsyncTask AsyncTask 是一種輕量級的異步任務類,可以在線程池中執(zhí)行后臺任務,然后把執(zhí)行的進度和最終結(jié)果傳遞給主線程并在主線程中更新 UI, AsyncTask 是一個抽象的泛型類,提供了 Params(參數(shù)的類型)、Progress(后臺任務執(zhí)行進度的類型) 和 Result(后臺任務的返回結(jié)果的類型) 這三個泛型參數(shù), AsyncTask 提供了4個核心方法
onPreExcute 先執(zhí)行,接著是 doInBackground,最后才是 onPostExecute。 當異步任務被取消時,onCancelled() 方法會被調(diào)用,這個時候 onPostExecute 則不會被調(diào)用。
2、AsyncTask 在具體的使用過程中的一些限制條件
3、AsyncTask 的工作原理 AsyncTask 中有兩個線程池(SerialExecutor 和 THREAD_POOL_EXECUTOR) 和一個 Handler(InternalHandler),線程池 SerialExecutor 用于任務的排隊,線程池 THREAD_POOL_EXECUTOR 用于真正地執(zhí)行任務,InternalHandler 用于將執(zhí)行環(huán)境從線程池切換到主線程。
4、HandlerThread HandlerThread 繼承了 Thread,是一種可以使用 Handler 的 Thread, 它的實現(xiàn)就是在 run 方法中通過 Looper.prepare() 來創(chuàng)建消息隊列,并通過 Looper.loop() 來開啟消息循環(huán)。
與普通的 Thread 相比,普通 Thread 主要用于在 run 方法中執(zhí)行一個耗時任務,而 HandlerThread 在內(nèi)部創(chuàng)建了消息隊列,外界需要通過 Handler 的消息方式來通知 HandlerThread 執(zhí)行一個具體的任務。
由于 HandlerThread 的 run 方法是一個無限循環(huán),因此當明確不需要在使用 HandlerThread 時,可以通過它的 quit 或者 quitSafely 方法來終止線程的執(zhí)行。
5、IntentService IntentService 是一種特殊的 Service,繼承了 Service 并且是一個抽象類,必須創(chuàng)建它的子類才能使用 IntentService。IntentService可用于執(zhí)行后臺耗時任務,任務執(zhí)行后會自動停止,并且它的優(yōu)先級比單純的線程要高很多,不容易被系統(tǒng)殺死。在實現(xiàn)上,IntentService 封裝了 HandlerThread 和 Handler。
Android 中的線程池
線程池的優(yōu)點
ThreadPoolExecutor ThreadPoolExecutor 是線程的真正實現(xiàn)。
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueueworkQueue, ThreadFactory threadFactory)