【安卓学习笔记】AsyncTask异步任务

【安卓学习笔记】AsyncTask异步任务_第1张图片
异步任务调用流程

要点:

  1. 安卓处理异步任务两种方法:Handler、AsyncTask。Handler在前一篇笔记中已经记录。相对来说,AsyncTask对于异步任务处理要更加灵活,尤其是复杂多线程情况;
  1. AsyncTask执行步骤:
    2.1 先继承AsyncTask抽象类,它有三个参数,分别代表:启动任务输入的参数,后台任务进度,任务完成后返回结果。这三个参数属于泛型,具体Integer、String等,由用户自定义,但要和其子函数进行对应。
    2.2 主线程中调用execute(Params... params)启动任务,注意这里的Params参数类型和2.1中对应,...代表可任意多个参数。
    2.3 execute执行后,会调用onPreExecute(),此函数可对UI进行操作
    2.4 接着doInBackground(Params... params)运行与后台,进行耗时操作。此函数中可接受execute传过来的参数。且可调用publishProgress(Progress... values),传递进度。
    2.5 publishProgress被调用后,会调用onProgressUpdate(Progress... values),这里可以对UI进行操作更新进度。同样Progress... values和前面对应。
    2.6 最后,当doInBackground执行完后,其会返回一个Result,并调用onPostExecute(Result result),在此函数中可对结果进行处理,并更新UI。
    2.7 AsyncTask在执行过程中,可在主线程中,调用cancel(true)函数进行取消异步任务。调用该函数后,会调用onCancelled()函数,在该函数中可更新UI。

主线程

//实例化异步class,传进去一个imageView和一个progressBar
MyAsyncTask task = new MyAsyncTask(imageView,progressBar);
//启动任务,1000是传给线程的参数,这里随便写的
task.execute(1000);

异步任务类

public class MyAsyncTask extends AsyncTask{
    private ImageView imageView;
    private ProgressBar progressBar;
    
    public MyAsyncTask(ImageView imageView,ProgressBar progressBar){
        this.imageView = imageView;
        this.progressBar = progressBar;
    }

    @Override
    protected String doInBackground(Integer... params) {
            
        MyThread mThread = new MyThread();
        for(int i=0;i<=100;i+=10){
            mThread.delayThread();
            publishProgress(i);
        }           
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        
        imageView.setImageResource(R.drawable.people4);
        super.onPostExecute(result);
    }

    @Override
    protected void onPreExecute() {
        imageView.setImageResource(R.drawable.people1);
        super.onPreExecute();
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        progressBar.setProgress(values[0]);
    }

}

参考:

1、http://blog.csdn.net/liuhe688/article/details/6532519/
2、http://www.runoob.com/w3cnote/android-tutorial-ansynctask.html

你可能感兴趣的:(【安卓学习笔记】AsyncTask异步任务)