当前位置: 代码迷 >> 综合 >> AsyncTask 异步任务
  详细解决方案

AsyncTask 异步任务

热度:103   发布时间:2023-11-21 21:22:15.0

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)方法才能触发此方法的调用),当进度值发生变化时,系统会自动在主线程中调用该方法@Overrideprotected 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)//可传入多个参数,