Android的線程和線程池

來源:互聯網
上載者:User

標籤:四大組件   更新   相關   res   異常   ctas   result   cell   調用   

1、背景                                                               

Android中,線程分為主線程和子線程,主線程主要處理和介面相關的事情,而子線程則往往用於執行耗時操作。

除了Thread本身以外,在Android中可以扮演線程角色還有AsynTask和IntentService,同時HandlerThread也是一種特殊的線程。

對於AsynTask來說,它的底層用到了線程池,AsynTask封裝了線程池和Handler,主要是為了方便開發人員在子線程中更新UI。

對於IntentService和HandlerThread,它們的底層則直接使用了線程。HandlerThread是一種具有訊息迴圈的線程,在它的內部可以使用Handler。

IntentService是一個服務,系統對其進行了封裝使其可以更方便地執行背景工作,IntentService內部採用HandlerThread來執行任務,當任務執行完畢後IntentService會自動結束。

Android主線程的作用是運行四大組件以及處理它們和使用者的互動,而子線程的作用則是執行耗時任務,比如網路請求,io操作等。

2、AsyncTask                                                   

AsyncTask是一種輕量級的非同步任務類,可以線上程池中執行背景工作,然後把執行的進度和最終結果傳遞給主線程並在主線程中更新UI。AsyncTask不適合進行特別耗時的背景工作,對於特別耗時的任務來說,建議使用線程池。

AsyncTask是一個抽象的泛型類:

public abstract class AsyncTask<Params,Progress,Result>

提供了四個核心方法:

a、onPreExecute(),在主線程中執行,在非同步任務執行之前,此方法會被調用,一般可以用於做一些準備工作。

b、doInBackground(Params ... params), 線上程池中執行,此方法用於執行非同步任務。可以通過publishProgress方法來更新任務的進度,publishProgress會調用onProgressUpdate方法。此外此方法需要返回結果給onPostExecute方法。

c、onProgressupdate(Progress ...values),在主線程中執行,當背景工作的執行進度發生改變時此方法會被調用。

d、onPostExecute(Result result),在主線程中執行,在非同步任務執行之後,此方法會被調用,其中result參數是背景工作的傳回值,即doInBackground的傳回值。

除了上述方法以外,AsyncTask還提供了onCancelled()方法,它同樣在主線程中執行,當非同步任務被取消時,onCancelled()方法會被調用,這個時候onPostExecute不會被調用。

注意:

a、AsyncTask的類必須在主線程中載入;

b、AsyncTask的對象必須在主線程中建立;

c、execute方法必須在UI線程調用;

d、一個AsyncTask對象只能執行一次,即只能調用一次execute方法,否則會報啟動並執行異常。

3、HandlerThread                                             

HandlerThread繼承Thread,它是一種可以使用Handler的Thread,它的實現是在run方法中通過Looper.prepare()來建立訊息佇列,並通過Looper.loop()來開啟訊息迴圈,這樣在實際的使用中就允許在HandlerThread中建立Handler了。

4、IntentService                                               

IntentService是一種特殊的Service,它繼承了Service並且它是一個抽象類別,因此必須建立它的子類才能使用IntentService。

Android的線程和線程池

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.