Android AsyncTask
生活随笔
收集整理的這篇文章主要介紹了
Android AsyncTask
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
AsyncTask類任務管理:
內部會創建一個進程作用域的線程池來管理要運行的任務,也就就是說當你調用了AsyncTask#execute()后,AsyncTask會把任務交給線程池,由線程池來管理創建Thread和運行Therad。
3.0以后的AsyncTask類加載方法:
?
//按先后順序每次只運行一個 private static ExecutorService SINGLE_TASK_EXECUTOR = (ExecutorService) Executors.newSingleThreadExecutor(); //自定義的CorePoolSize為7的線程池,允許7個線程同時運行 private static ExecutorService LIMITED_TASK_EXECUTOR = (ExecutorService) Executors.newFixedThreadPool(7); //未設限制,全部執行 private static ExecutorService FULL_TASK_EXECUTOR = (ExecutorService) Executors.newCachedThreadPool(); //提供自定義的線程池來運行和調度Thread task.executeOnExecutor(SINGLE_TASK_EXECUTOR); //task.executeOnExecutor(LIMITED_TASK_EXECUTOR); //task.executeOnExecutor(FULL_TASK_EXECUTOR);?
使用AsyncTask類,以下是幾條必須遵守的準則:
1) Task的實例必須在UI thread中創建;
2) execute方法必須在UI thread中調用;
3) 不要手動的調用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)這幾個方法;
4) 不能在doInBackground(Params... params)中更改UI組件的信息。
5) 該task只能被執行一次,否則多次調用時將會出現異常;
1 private CustomTask mTask; 2 @Override 3 public void onClick(View v) { 4 //注意每次需new一個實例,新建的任務只能執行一次,否則會出現異常 5 mTask = new Custom(); 6 mTask.execute("http://www.baidu.com"); 7 }自定義AsyncTask:
三種泛型類型分別代表“啟動任務執行的輸入參數”、“后臺任務執行的進度”、“后臺計算結果的類型”。
1 private class CustomTask extends AsyncTask<String, Integer, String> { 2 //onPreExecute方法用于在執行后臺任務前做一些UI操作 3 @Override 4 protected void onPreExecute() { 5 textView.setText("loading..."); 6 } 7 8 //doInBackground方法內部執行后臺任務,不可在此方法內修改UI 9 @Override 10 protected String doInBackground(String... params) { 11 try { 12 for (int count = 0; count < 10; count ++) { 13 //調用publishProgress方法公布進度,觸發onProgressUpdate方法,從而對UI進行修改 14 publishProgress((int) ((count / (float) total) * 100)); 15 //休眠500毫秒 16 Thread.sleep(500); 17 } 18 return new String("success"); 19 } catch (Exception e) { 20 Log.e(TAG, e.getMessage()); 21 } 22 return null; 23 } 24 25 //onProgressUpdate方法用于更新進度信息 26 @Override 27 protected void onProgressUpdate(Integer... progresses) { 28 progressBar.setProgress(progresses[0]); 29 textView.setText("loading..." + progresses[0] + "%"); 30 } 31 32 //onPostExecute方法用于在執行完后臺任務后更新UI,顯示結果 33 @Override 34 protected void onPostExecute(String result) { 35 textView.setText(result); 36 } 37 38 //onCancelled方法用于在取消執行中的任務時更改UI 39 @Override 40 protected void onCancelled() { 41 textView.setText("cancelled"); 42 progressBar.setProgress(0); 43 } 44 }當需要停止任務時:
@Override public void onClick(View v) { //取消一個正在執行的任務,onCancelled方法將會被調用 mTask.cancel(true); }?
轉載于:https://www.cnblogs.com/CharlesGrant/p/4867296.html
總結
以上是生活随笔為你收集整理的Android AsyncTask的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 选择最频繁出现之前,5文章
- 下一篇: MongoDB 树形模型