在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;
}
答案 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链接。 希望这能帮助你。