AsyncTask幾點要注意的地方

問題1:AsyncTask是多線程嗎?
答:是。
問題2:AsyncTask與Handler相比,誰更輕量級?
答:經過看源碼,發現AsyncTask實際上就是一個線程池,而網上的說法是AsyncTask比handler要輕量級,顯然上不許確的,只能這樣說,AsyncTask在代碼上比handler要輕量級別,而實際上要比handler更耗資源,由於AsyncTask底層是一個線程池!而Handler僅僅就是發送了一個消息隊列,連線程都沒有開。
       可是,若是異步任務的數據特別龐大, AsyncTask 這種線程池結構的優點就體現出來了。 AsyncTask三個狀態:pending,running,finished AsyncTask方法: 必選方法: 1,  doinbackground(params…) 後臺執行,比較耗時的操做均可以放在這裏。 注意這裏不能直接操做UI。此方法在後臺線程執行,完成任務的主要工做 ,一般須要較長的時間。在執行過程當中能夠調用 Public progress(progress…)來更新任務的進度。 2,  onpostexecute(result)至關於handler處理UI的方式,在這裏可使用在 doinbackground獲得的結果處理操做UI。此方法在主線程執行,任務執行的結果做爲此方法的參數返回。 可選方法: 1,  onprogressupdate(progress…) 可使用進度條增長用戶體驗度。此方法在主線程執行,用戶顯示任務執行的進度。 2,  onpreExecute()  這裏是最新用戶調用excute時的接口,當任務執行以前開始調用此方法,能夠在這裏顯示進度對話框。 3,  onCancelled()  用戶調用取消時,要作的操做。 AsyscTask定義了三種泛型類型params,progress和result. 1,  params啓動任務執行的輸入參數,好比http請求的URL 2,  progress後臺任務執行的百分比 3,  result後臺執行任務最終返回的結果,好比String,好比我須要獲得的list。 使用AsyncTask類,遵照的準則: 1,  Task的實例必須在UI thread中建立; 2,  Execute方法必須在UI thread中調用 3,  不要手動的調用onPfreexecute(),onPostExecute(result)Doinbackground(params…),onProgressupdate(progress…)這幾個方法; 4,  該task只能被執行一次,不然屢次調用時將會出現異常; AsyncTask的整個調用過程都是從execute方法開始的,一旦在主線程中調用execute方法,就能夠經過onpreExecute方法,這是一個預處理方法,好比能夠在這裏開始一個進度框,一樣也能夠經過onprogressupdate方法給用戶一個進度條的顯示,增長用戶體驗;最後經過onpostexecute方法,至關於handler處理UI的方式,在這裏可使用在doinbackground獲得的結果處理操做UI。此方法在主線程執行,任務執行的結果做爲此方法的參數返回
相關文章
相關標籤/搜索