Android非同步----重新認識Android(6)

AND_YOU_with_ME發表於2017-04-14
Android執行緒使用規定:
1、子執行緒不能操作UI元件(UI元件的方法都是不同步的)(注意:如果子執行緒在UI執行緒初始化的時候就執行完成,那麼就不會引發異常)
2、Android4.0之後規定不能再UI執行緒中進行網路資料互動並且耗時操作應該在子執行緒中完成

AsyncTask非同步任務類:
1、抽象泛型類--
在使用的時候必須指明具體的型別AsyncTask<Params,Progress,Result>
泛型說明:
Params :第一個泛型,一般是請求的URL或String
Progress: 第二個,更新進度,常用型別是Integer
Result :第三個,下載執行緒執行完後返回的結果,常用Bitmap,byte[],String

使用步驟:
1、自定義非同步任務類並指明泛型
2、重寫方法
Result doInBackground(Params... params) 後臺執行的任務
onPostExecute(Result result) 任務完成,UI主執行緒執行
3、有選擇的重寫以下方法
onPreExecute() 後臺任務開始之前的準備工作,UI主執行緒執行
onProgressUpdate(Progress... values) 當前執行的進度,UI主執行緒執行
onCancelled(Result result) 取消任務時,任務已完成的情況
onCancelled() 取消任務,任務正在執行的情況
4、在UI執行緒中建立自定義非同步任務類物件,並execute執行

非同步任務方法說明:
1.onPreExecute() 執行在UI執行緒中在AsyncTask執行前執行的準備方法
2.doInBackground() 執行在工作執行緒中進行耗時操作的方法
引數的型別與AsyncTask泛型的第一個引數型別一致 可變引數
返回值與AsyncTask泛型的第三個引數型別一致 返回工作執行緒耗時操作的結果
publishProgress(progress);//通知主執行緒修改當前進度
3.onProgressUpdate() 執行在主執行緒中用來更新進度的方法
只要doInBackground()中呼叫了publishProgress(progress);就立即執行該方法
該方法的引數與AsyncTask中泛型的第二個引數型別一致 可變引數
4.onPostExecute() 執行在主執行緒中用來將耗時操作的結果顯示到ui介面中
引數是與AsyncTask的泛型的第三個引數型別一致

1、獲取JSON格式的字串顯示在TextView中
2、將對應的字串解析,將解析結果通過介面卡設定給Spinner

3、當前頁面增加一個按鈕用於跳轉到另外頁面(跳轉的時候要求取消非同步任務)
4、另外頁面非同步任務載入圖片


1、使用非同步任務載入圖片
2、使用非同步任務載入並解析JSON
3、使用非同步任務載入並解析XML資料











相關文章