Android中AsyncTask使用

一、AsyncTask的作用

代替Thread+Handler的组合,使创建异步任务变得简单。

AsyncTask执行后台操作,并在用户界面上发布结果,而不必处理线程。

 

二、AsyncTask的定义:

public abstract class AsyncTask<Params,Progress,Result> extends Object

AsyncTask必须子类可以使用。子类将覆盖至少一个方法(doInBackground执行异步任务),通常会覆盖一次(onPostExecute显示结果,更新UI)

AsyncTask三种类型如下:

》Params,参数的类型发送到任务执行时。

》Progress,在后台计算过程中公布的进度单元类型。

》Result,计算结果的类型。

不是所有类型都是异步任务所使用的。要标记为未使用的类型,设置该类型Void:

 

三、AsyncTask的方法:

1、onPreExecute()

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


2、doInBackground(Params...)

后台线程调用onPreExecute()完成后立即执行。这一步后台进程执行,可能会花费很长时间。


3、onProgressUpdate(Progress...)

调用publishProgress,在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、任务实例必须在用户界面线程中创建。

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

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

4、一个任务实例只能执行一次,如果执行第二次将会抛出异常

 

你可能感兴趣的:(Android中AsyncTask使用)