Android中AsyncTask使用

来源:互联网 发布:js数组中移除元素 编辑:程序博客网 时间:2024/06/06 09:25

一、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、一个任务实例只能执行一次,如果执行第二次将会抛出异常

0 0