日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android AsyncTask

發布時間:2025/4/14 Android 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。