异步任务AsyncTask

来源:互联网 发布:二手交易平台源码 编辑:程序博客网 时间:2024/05/16 19:42

有时我们要做一些耗时的任务时,往往不会在UI主线程里面去做这些事情,而是在另外的线程里去执行。我个人觉得用异步任务AsyncTask可以非常简单地实现这一操作。它有两个特别明显的好处:1、不会阻塞主线程;2、可以修改主线程界面组件。
AsyncTask< Params,Progress,Result>是抽象类,它的三个泛型参数的含义是:
Params:启动任务执行的输入参数类型
Progress:后台任务完成情况的反馈值的类型
Result:后台执行完成返回的值的类型
使用AsynTask需要执行如下几步:
1、创建AsynTask的子类,并为三个泛型指定类型,如果某个参数不需要指定类型,可指定为Void(V大写)。
2、重写各种方法:
doInBackground(Params…):这个方法最重要,在里面实现你需要在后台执行的任务,例如在这里实现复制文件、下载图片等等任务。在该方法中还可以主动调用publishProgress(Progress…values)方法去反馈更新任务的完成状况。
onProgressUpdate(Progress…values):在调用了publishProgress(Progress…values)后,会触动系统调用此方法。
onPreExecute():该方法将在执行耗时后台任务之前被调用,通常用来完成一些初始化的准备工作。
onPostExecute(Result result):当DoInBackground()完成后,系统调用该方法,并把DoInBackground()方法的返回值给它。
3、调用AsyncTask子类实例的execute(Params…params)方法开始执行耗时任务。
下面贴一个异步任务下载的例子(《疯狂Android讲义》上面的例子):

public class AsyncTaskTest extends Activity{    private TextView show;    @Override    public void oncreate(Bundle savedInstanceState){        super.onCrate(savedInstanceState);        setContentView(R.layout.main);        show = (TextView)findViewById(R.id.show);    }    //一个触发下载任务的按钮的点击事件    public void download(View source) throws Exception{    DownTask task=new DownTask(this);    task.execute(new URL("..."));//这里就是在开始执行耗时任务了    }    //定义一个AsyncTask的实现类    class DownTask extends AsyncTask<URL,Integer,String>{    大概就是在onPreExecute里面实现了一个之前声明的进度展示框,在doInBackground里去实时调用publishProgress方法,在onProgressUpdate方法里面去实时更新进度框的进度条    }
0 0