Android开发:AsyncTask源码解析(3)

调用了onPostExecute(result)方法,并把状态改正已执行结束。
因而AsyncTask的onPostExecute方法一般是在执行doInBackground方法之后由UI线程来执行收尾工作,

2、MESSAGE_POST_PROGRESS 执行AsyncTask的onProgressUpdate方法,一般用来在任务执行中进行进度条的更新等,该MESSAGE_POST_PROGRESS是由publishProgress方法的调用来引起的

protected final void publishProgress(Progress... values) {      sHandler.obtainMessage(MESSAGE_POST_PROGRESS,              new AsyncTaskResult<Progress>(this, values)).sendToTarget();  

而publishProgress方法一般是在doInBackground中根据实际情况来更新UI线程,比如更新进度条等。

1、MESSAGE_POST_CANCEL,取消任务,调用了AsyncTask的.onCancelled()方法

其中onPostExecute、publishProgress、onCancelled都是由子类提供的。

到这里AsyncTask类的使用也就很简单了,

AsyncTask的执行分为四个步骤,每一步都对应一个回调方法,这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。

     onPreExecute(), 该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。

    doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。

    onProgressUpdate(Progress...),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。

    onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread.

AsyncTask的调用也很简单,只要在UI线程中执行execute方法

为了正确的使用AsyncTask类,以下是几条必须遵守的准则:

  1) Task的实例必须在UI thread中创建

  2) execute方法必须在UI thread中调用

  3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法

  4) 该task只能被执行一次,否则多次调用时将会出现异常

doInBackground方法和onPostExecute的参数必须对应,这两个参数在AsyncTask声明的泛型参数列表中指定,第一个为 doInBackground接受的参数,第二个为显示进度的参数,第第三个为doInBackground返回和onPostExecute传入的参数。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwgsjp.html