/** * 第一個參數類型Boolean 爲啓動任務執行的輸入參數,doInBackground方法傳入 * 第二個參數類型Integer 爲後臺執行過程時參數輸出,onProgressUpdate方法傳入 * 第三個參數類型String 爲最後輸出返回的結果值,onPostExecute 方法傳入 */ private class TestAsyncTask extends AsyncTask<Boolean,Integer,String>{ private Context mContext; public TestAsyncTask(Context context){ this.mContext = context; } private ProgressDialog dialog; //二、運行完onPreExecute後執行,長時間的操做放在此方法內, //此方法內不能操做UI //返回結果值 @Override protected String doInBackground(Boolean... strings) { for(int i=0;i<100;i++){ this.publishProgress(i);//傳參給onProgressUpdate 進行UI等操做,例如執行進度更新 } return null; } //一、開始執行時運行 @Override protected void onPreExecute() { dialog = ProgressDialog.show(mContext,"提示","操做執行中...."); super.onPreExecute(); } //三、執行完畢 @Override protected void onPostExecute(String s) { if(dialog.isShowing()){ dialog.dismiss(); } super.onPostExecute(s); } //執行過程進行進度更新等操做 @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); } //調用取消時,要作的操做 @Override protected void onCancelled(String s) { super.onCancelled(s); } //調用取消時,要作的操做 @Override protected void onCancelled() { super.onCancelled(); } }
具體參數對應java
方法調用:ide
AsyncTask必須在UI線程中實例化,經過excute()開始調用執行,調用也必須在UI線程中進行this
每次實例化AsyncTask只能調用一次線程
新執行的Task時若是還存在其餘tTask未執行完畢,新Task只會執行onPreExecute方法,等待前一個Task執行完畢才進行餘下的方法。code
若是想同時執行多個AsyncTask任務,調用時可經過new AsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)執行。string
可是也是隻能進行五個任務同時執行。class
想同時執行更多個任務也能夠新建ExecutorService來執行。後臺
private static ExecutorService SINGLE_TASK_EXECUTOR; private static ExecutorService LIMITED_TASK_EXECUTOR; private static ExecutorService FULL_TASK_EXECUTOR; static { // SINGLE_TASK_EXECUTOR = (ExecutorService) Executors.newSingleThreadExecutor(); //使用自定義的CorePoolSize爲7 LIMITED_TASK_EXECUTOR = (ExecutorService) Executors.newFixedThreadPool(7); //使用未設限制的Executor FULL_TASK_EXECUTOR = (ExecutorService) Executors.newCachedThreadPool(); }; //執行 new TestAsyncTask().executeOnExecutor(LIMITED_TASK_EXECUTOR);