2014-02-11 4 views
3

Обязательно лизывать super.onPreExecute при переопределении onPreExecute в AsyncTask? Что делает AsyncTask.onPreExecute и другие методы на самом деле? же вопрос onPostExecute и onCancelledПереопределение предварительного/пост-выполнения в AsyncTask и вызов super.onPre/PostExecute

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; 
} 

ответ

8

Нет, вам не нужно вызывать 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) { 
} 
+0

Отлично. И спасибо за ссылку на исходный код. –

+0

Не было бы хорошей практикой по-прежнему вызывать 'super' из-за будущих обновлений' AsyncTask'? Там ничего нет, но что, если они меняют его ... – Daniel

2

Нет, мы не в принудительном порядке должны переопределить методы onPreExecute & onPostExecute.

onPreExecute вызывается перед doInbackground Процесс начинается Можно добавить код в этом методе, который мы должны сделать, прежде чем любая вещь Начало работы doInbackground.

doInbackground Работает в фоновом режиме, поэтому в этом методе делаем все, что мы хотим сделать в фоновом режиме, например, для вызова веб-сервиса и всего. но ВНИМАНИЕ для этого метода не устанавливать виджеты пользовательского интерфейса в этом методе. Если установлено, это даст исключение.

onPostExecute вызывается после завершения на doInbackground & в этом методе мы можем установить виджеты пользовательского интерфейса и другой код, чтобы установить после вызова веб-сервиса завершена.

OnCancelled Задача может быть отменена в любое время путем вызова cancel (boolean). Вызов этого метода приведет к последующим вызовам isCancelled(), чтобы вернуть true.

проверка this ссылка. Надеюсь, это поможет вам.

+0

Я спрашивал о реализации базового класса, но спасибо вам все равно за ваше время. –

Смежные вопросы