覆盖AsyncTask中的前/后执行并调用super.onPre / PostExecute

时间:2014-02-11 13:52:38

标签: java android android-asynctask

在AsyncTask中覆盖onPreExecute时,是否必须调用super.onPreExecute? AsyncTask.onPreExecute和其他方法实际上做了什么? onPostExecute和onCancelled的相同问题

public class MyAsyncTask extends AsyncTask<Void, Void, Boolean> 
{

@Override
protected void onCancelled(Boolean result) {

    super.onCancelled(result);   //<-DO I HAVE TO?

            //My onCancelled code below


}

@Override
protected void onPostExecute(Boolean result) {

    super.onPostExecute(result);  //<-DO I HAVE TO?

            //My onPostExecute code below
}

@Override
protected void onPreExecute() {

    super.onPreExecute();  //<-DO I HAVE TO?

            //My onPreExecute code below

}

@Override
protected Boolean doInBackground(Void... params) {

    return null;
}

2 个答案:

答案 0 :(得分:10)

不,您无需致电super。这是source

如您所见,默认实现不执行任何操作。

/**
* Runs on the UI thread before {@link #doInBackground}.
*
* @see #onPostExecute
* @see #doInBackground
*/
protected void onPreExecute() {
}

/**
* <p>Runs on the UI thread after {@link #doInBackground}. The
* specified result is the value returned by {@link #doInBackground}.</p>
*
* <p>This method won't be invoked if the task was cancelled.</p>
*
* @param result The result of the operation computed by {@link #doInBackground}.
*
* @see #onPreExecute
* @see #doInBackground
* @see #onCancelled(Object)
*/
@SuppressWarnings({"UnusedDeclaration"})
protected void onPostExecute(Result result) {
}

答案 1 :(得分:2)

不,我们不强制要求覆盖方法   onPreExecute&amp; onPostExecute。

<强> onPreExecute doInbackground 进程开始之前调用我们可以在此方法中添加代码,我们必须先做任何事情才能开始工作 doInbackground

<强> doInbackground 在后台工作,所以在这个方法做我们想在后台做的任何事情,如调用Web服务和所有。但注意此方法不是在此方法中设置UI小部件。如果设置它将给出例外。

<强> onPostExecute doInbackground &amp;上完成后调用在这个方法中,我们可以在Webservice调用完成后设置UI小部件和其他代码。

<强> OnCancelled 可以通过调用cancel(boolean)随时取消任务。调用此方法将导致后续调用 isCancelled()返回true。

检查this链接。 希望这能帮助你。