AsyncTask 异步任务

来源:互联网 发布:linux中的samba下载 编辑:程序博客网 时间:2024/05/21 12:42

AsyncTask 封装了新建子线程用于做耗时操作,并提供了子线程与UI线程的信息互动的方法;
使用方法:

  • 创建一个类MyAsyncTask 继承于AsyncTask,并重写四个重要的方法;
//AsyncTask<Params,Progress,Result>是带泛型的类,Param为要传入AsyncTask的参数类型,Progress为任务执行的进度类型,Result是任务需要返回的结果类型,下面案列中,将传入string类型的参数,进度用integer类型值,返回一个Bitmap的类型;public  class DownloadAsyncTask extends AsyncTask<String, Integer, Bitmap> {        @Override        //在UI主线程中调用,主要是用于子线程开始前的准备工作,如UI的准备等             protected void onPreExecute() {            progressBar.setVisibility(View.VISIBLE);        }        @Override        //在UI主线程中调用,主要是用于子线程完成任务后的对返回结果的处理逻辑,及UI的变化等          protected void onPostExecute(Bitmap bitmap) {            progressBar.setVisibility(View.GONE);            imageView.setImageBitmap(bitmap);        }        @Override        //在子线程中完成的任务逻辑,String...params为传入的可变长的String类型的数组        protected Bitmap doInBackground(String... params) {             String st0 =params[0]//传入的第一个String参数             for(int i= 0 ;i<10;i++){               publishProgress(i);//可以传入多个指定进度类型的参数             }            ...业务逻辑...                     return bitmap;        }        @Override        //在UI主线程中调用,用于记录子线程完成任务的进度(在doInBackground()方法中调用    publicProgress(object...objects)方法才能触发此方法的调用),当进度值发生变化时,系统会自动在主线程中调用该方法        @Override        protected void onProgressUpdate(Integer... values) {        int i = values[0];//第一个进度值参数        }/** * 这四个方法的调取顺序和位置:(这些方法是系统自动调用的,不需要我们手动调用) *  onPreExecute()(UI主线程中)——> doInBackground()(子线程中)——> onPostExecut()(UI主线程中) *                                     | *                               publicProgress()(doInBackground()方法中) *                                     | *                               onProgressUpdate()(UI主线程中)**/
  • 在Activity中的方法中调用AsyncTask:
MySyncTask task = new MySyncTask();task.execute(string1)//可传入多个参数,
0 0