调用了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传入的参数。