Android中AsyncTask使用

一、AsyncTask的定义

AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程,并在主线程更新UI。

从实现上来说,AsyncTask封装了Thread和Handler,通过AsyncTask可以很方便执行后台任务以及在主线程中访问UI。

 

AsyncTask是一个抽象的泛型类,它提供了Params、Progress和Result这三个泛型参数

public abstract class AsyncTask<Params,Progress,Result>

AsyncTask三个泛型参数:

》Params,任务的输入参数类型;

》Progress,任务执行进度的参数类型。

》Result,任务返回结果的参数类型。

如果AsyncTask确实不需要传递具体的参数,那么这三个泛型参数可以用Void来代替。

 

二、AsyncTask的4个核心方法:

1、onPreExecute()

在任务开始后立即调用,在UI线程执行。这一步通常用于设置任务,例如在用户界面中初始化进度条。


2、doInBackground(Params...)

在后台线程池中执行,可能会花费很长时间;可以通过publishProgress方法来更行任务的进度,publishProgress方法会调用onProgressUpdate方法;此方法还需要返回结果给onPostExecute方法。


3、onProgressUpdate(Progress...)

在UI线程上执行。这种方法是用来显示用户进度界面,后台进程仍在执行。例如,它可用于显示一个进度条或在文本中显示日志。


4、onPostExecute(Result)

在UI线程上执行。后台进程的结果被传递到这一步作为参数。

 

常用的写法如下:

class MyTask extends AsyncTask<String, Integer, String> {

    @Override
    protected String doInBackground(String... params) {
        //执行异步任务
        int n = 10;
        //调用publishProgress公布进度,最后onProgressUpdate方法将被执行
        publishProgress(n);  
        Thread.sleep(500);    
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        //更新UI,显示结果
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        //更新进度信息
    }

 任务调用的代码:

new MyTask().execute();//执行任务

 

三、AsyncTask的规则:

1、AsyncTask实例必须在UI线程中创建。

2、execute(Params... params)方法必须在UI线程中调用。

3、不要手动调用onPreExecute,doInBackground,onProgressUpdate,onPostExecute这些方法

4、一个AsyncTask实例只能执行一次(只能调用一次execute方法),如果执行第二次将会抛出异常

 

posted @ 2015-09-23 10:58  竹下半碗茶  阅读(1517)  评论(0编辑  收藏  举报