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

【安卓学习笔记】AsyncTask异步任务
文章图片
异步任务调用流程 要点:

  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]); }}

参考:
【【安卓学习笔记】AsyncTask异步任务】1、http://blog.csdn.net/liuhe688/article/details/6532519/
2、http://www.runoob.com/w3cnote/android-tutorial-ansynctask.html

    推荐阅读