Android 中的线程及 AsyncTask(线程形态之一)解析一下
科普一下 線程是操作系統調度的最小單元.
線程在android中是一個很重要的概念.
主線程 也叫 UI 線程 作用: 運行四大組件以及處理他們和用戶交互.
子線程 作用; 執行耗時任務. 比如 I/O 操作, 網絡請求.
android 3.0 開始,網絡訪問必須放在子線程中.
線程形態: 1傳統的Thread, 2 AsyncTask ,3 HandlerThread ,4 IntentService
2,3,4 這個三者底層實現也是線程,各有各自的優缺點.
下面解析一下
AsyncTask
一種 輕量級的異步任務類,可以在線程池中執行后臺任務 . 然后把執行的進度條和最終結果傳遞給主線程 并在主線程中更新UI.
注意:AsyncTask 不適合特別耗時的后臺任務. 可以使用線程池來解決.
4個核心方法
此外還有一個方法
步驟 : onPreExecute 先執行, 接著是 doInBackground ,最后是 onPostExecute , 除了這個四個方法之外 , 當異步任務取消的時候會執行 onCancelled()方法. 這個時候 onPostExecute 不會調用了
AsyncTask 使用限制
1 ,AsyncTask的類必須在主線程中加載. (5.0源碼中可見)
2.execute 方法必須在UI線程調用.
3.一個AsyncTask 對象只能執行一次. 否則報運行時異常錯誤
4.AsyncTask的對象必須在主線程中創建.
源碼解析
在多說一點 :
AsyncTask中有兩個線程池,(SerialExecutor 和 THREAD_POOL_EXECUTOR ) 和 一個Handler(InternalHandler ) ,
其中,
線程池SerialExecutor 用于任務的排隊,
THREAD_POOL_EXECUTOR 用于真正的執行任務,
InternalHandler 用于將執行環境從線程池中切換到主線程.
好的今天 就分享這么多啦. 下次有時間 和大家分享一下 線程池的 故事..
總結
以上是生活随笔為你收集整理的Android 中的线程及 AsyncTask(线程形态之一)解析一下的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自定义View 中很关键的问题View
- 下一篇: 使用 okHttp 3.0 版本前后的两