真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

淺談Android的線程和線程池的使用-創(chuàng)新互聯(lián)

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í)行,在異步任務執(zhí)行之前,此方法會被調(diào)用,一般可以用于做一些準備工作。
  • doInBackground(Params...params),在線程池中執(zhí)行,此方法用于執(zhí)行異步任務,params 參數(shù)表示異步任務的輸入?yún)?shù)。在此方法中可以通過 publishProgress 方法來更新任務的進度,publishProgress 方法會調(diào)用 onProgressUpdate 方法,另外此方法需要返回計算結(jié)果給 onPostExecute 方法。
  • onProgressUpdate(Progress...values),在主線程中執(zhí)行,當后臺任務的執(zhí)行進度發(fā)生改變時此方法會被調(diào)用。
  • onPostExecute(Resukt result),在主線程中執(zhí)行,在異步任務執(zhí)行之后,此方法會被調(diào)用,其中 result 參數(shù)是后臺任務的返回值,即 doInBackground 的返回值。

onPreExcute 先執(zhí)行,接著是 doInBackground,最后才是 onPostExecute。 當異步任務被取消時,onCancelled() 方法會被調(diào)用,這個時候 onPostExecute 則不會被調(diào)用。

2、AsyncTask 在具體的使用過程中的一些限制條件

  • AsyncTask 的類必須在主線程中加載;
  • AsyncTask 的對象必須在 UI 線程中創(chuàng)建;
  • 不要在程序中直接調(diào)用 onPreExecute、onPostExecute、doInBackground 和 onProgressUpdate 方法。
  • 一個 AsyncTask 對象只能執(zhí)行一次,即只能調(diào)用一次 execute 方法,否則會報運行時異常。
  • 在 Android 1.6之前,AsyncTask 是串行執(zhí)行任務的,Android 1.6的時候 AsyncTask 開始采用線程池處理并行任務,但是從 Android 3.0開始為了避免 AsyncTask 所帶來的并發(fā)錯誤,AsyncTask 又采用一個線程來串行執(zhí)行任務。但是在 Android 3.0 以及后續(xù)的版本中,仍然可以通過 AsyncTask 的 executeOnExecutor 方法來并行地執(zhí)行任務。

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)點

  • 重用線程池中的線程,避免因為線程的創(chuàng)建和銷毀所帶來的性能開銷;
  • 能有效控制線程池的大并發(fā)數(shù),避免大量的線程之間因互相搶占系統(tǒng)資源而導致的阻塞現(xiàn)象;
  • 能夠?qū)€程進行簡單的管理,并提供定時執(zhí)行以及指定間隔循環(huán)執(zhí)行等功能。

ThreadPoolExecutor ThreadPoolExecutor 是線程的真正實現(xiàn)。

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

分享標題:淺談Android的線程和線程池的使用-創(chuàng)新互聯(lián)
當前URL:http://weahome.cn/article/jdooh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部