1. 程式人生 > >Android執行緒與執行緒池(一)

Android執行緒與執行緒池(一)

前言,學習安卓很久了,一直也沒有學部落格的習慣,下決心從今天開始要養成寫部落格總結學習經驗的好習慣!

一.Android中執行緒與執行緒池的簡介

在Android中執行緒主要可以分為兩大類:一個用於處理介面相關與使用者互動的執行緒-主執行緒;一個用於處理耗時任務-子執行緒。因為學習Android的我們都會知道,在主執行緒中是不可以做耗時任務的,這樣會導致介面卡頓影響與使用者的互動體驗。Android中扮演者執行緒角色的有很多,比如:AsyncTask,IntentService,HandlerThread。我們先簡要介紹他們各自的特點,然後逐個進行深入理解學習。

二 .扮演著執行緒角色的各自特點

1.AsyncTask:封裝了執行緒池和Handler,主要為了方便在子執行緒更新UI。

2.HandlerThread:是一個具有訊息迴圈的執行緒,在其內部可以使用Handler。

3.IntentService:它本身是一個服務,這就保證其不容易被系統回收,能夠長時間存活在後臺。其內部採用HandlerThread來之行任務,當任務執行完畢後IntentService會自動退出。

三.主執行緒和子執行緒

在Android中主執行緒就是UI執行緒。主要作用執行四大元件以及處理介面互動相關的邏輯,因為使用者隨時會和介面發生互動,因為主執行緒在任何時候都要求具有較高的響應速度,否則就會產一種介面卡頓的感覺。為了保持較高的響應速度,這就要求主執行緒中不能執行耗時的任務,耗時任務轉移到子執行緒中執行。子執行緒在Android中就是除了主執行緒之外的所有的執行緒。從Android3.0開始訪問網路的請求必須在子執行緒中進行,否則會丟擲NetworkOnMainThreadException異常,這樣做就是為了避免主執行緒阻塞而出現ANR現象。

四.執行緒池

1.概念:Android中執行緒池的概念來源於Java中deExecutor,Executor是一個介面,而且只有一個execute()方法。

public interface Executor {

    /**
     * Executes the given command at some time in the future.  The command
     * may execute in a new thread, in a pooled thread, or in the calling
     * thread, at the discretion of the {
@code Executor} implementation. * * @param command the runnable task * @throws RejectedExecutionException if this task cannot be * accepted for execution * @throws NullPointerException if command is null */ void execute(Runnable command); }
真正的執行緒池實現則是ThreadPollExecutor,ThreadPollExecutor提供了一系列引數來允許配置不同特點的執行緒池。

2.執行緒池的優點

(1),執行緒的複用,執行緒池可以重用執行緒池中的執行緒,避免因為現成的建立和銷燬所帶來的效能開銷。

(2).能夠有效的控制執行緒的最大併發數,避免大量的執行緒之間互相搶佔系統資源二導致的阻塞現象。

(3).能夠對執行緒進行簡單的管理,並提供定時執行任務以及指定間隔迴圈執行任務的功能。