读书人

异步任务类AsyncTask上分析

发布时间: 2012-09-27 11:11:17 作者: rapoo

异步任务类AsyncTask下分析

<!--@page { margin: 2cm }P { margin-bottom: 0.21cm }-->

一.异步任务

?

异步任务可以适当的/易用与UI线程当中,这个类允许执行后台操作,并在不操作线程和handler的情况下将处理后的数据返回给UI线程。

异步任务的设计是线程类(Thread)和Handler类的一个辅助类,该类并不构成通用线程框架。异步任务建议在处理耗时较短的操作上使用(以秒单位的操作上),如果需要线程需要处理耗时较长的操作,建议使用java中java.util.concurrent包中的Executor,ThreadPoolExecutor和FuturTeask类。

异步任务类是个抽象类,使用时必须使用子类,并在子类中必须重写doInBackground()方法。

?

(1)当异步任务执行过程中,可以分为下4步:

?

1.onPreExecute()

异步任务开始执行时直接调用这个方法。(即execute()调用后)这个方法里功能通常所让UI中显示进度条。

?

2.doInBackground(Params…)

该方法在onPreExecute()执行完后直接执行,UI中的参数直接传递到这个方法中,参数被处理后有这个方法传递给最后的一个方法(onPostExecute()方法)。同时在处理过程中通过调用publishProgress()方法可以,引发onProgressUpdate方法的调用

?

3.onProgressUpdate(Progress…)

更新UI

4.onPostExecute(Result)

后台处理完成后执行该方法。后台数据传递给该方法。

?

(2)取消任务

在任何时候只要执行cancel(boolean)方法,当前任务就会被取消,随后引发isCancelled()方法的执行,该方法返回true.isCancelled()方法执行之后,任务不再执行onPostExecute(),而是执行onCancelled(Object)方法。

?

注意:

1.异步任务在UI线程中被声明。

2.异步任务在UI线程中被启动执行。

3.不需要手动调用onPreExecute()/onPostExecute()/doInBackground()等方法。

4.异步任务只能启动一次,试图启动两次会抛出异常。

?

参数的类型

AsyncTask<Params,?Progress,?Result>

?

1.Params由UI线程传递给后台操作的数据类型(即execute()方法的参数类型)

2.Progress后台处理过程中的数据类型(即publishProgress()和onProgressUpdate参数接受的类型)

3.Result.后台处理后结果的返回类型。

这些内容都是帮助文档的内容。有不准确的地方还请指出来。

读书人网 >移动开发

热点推荐