AsyncTask не вызывает onProgressUpdate, onPostExecute

Я пытаюсь понять использование AsyncTask на Android, и с этой целью я разработал этот простой код.

И неожиданно doInbackground называется правильно, и я вижу журналы, но другие два метода не вызываются.

Я что-то упускаю?

Спасибо advancde

  public class DownloadFilesTask extends AsyncTask<Void, Void, Void> { protected Void doInBackground(Void... params) { try { Log.i("Thread","1"); Thread.sleep(1000); Log.i("Thread","2"); Thread.sleep(1000); Log.i("Thread","3"); Thread.sleep(1000); Log.i("Thread","4"); Thread.sleep(1000); Log.i("Thread","5"); } catch (InterruptedException e) { e.printStackTrace(); } return null; } protected void onProgressUpdate(Void... progress) { Log.i("Thread","onProgress"); } protected void onPostExecute(Void... result) { Log.i("Thread","onPosts"); } } 

[РЕДАКТИРОВАТЬ]

С помощью этого кода все работает правильно, кроме onProgressUpdate

 public class DownloadFilesTask extends AsyncTask<Void, Integer, String> { public String doInBackground(Void... params) { try { int i = 0; Log.i("Thread","1"); Thread.sleep(1000); publishProgress(i++); Log.i("Thread","2"); Thread.sleep(1000); publishProgress(i++); Log.i("Thread","3"); Thread.sleep(1000); Log.i("Thread","4"); Thread.sleep(1000); Log.i("Thread","5"); } catch (InterruptedException e) { e.printStackTrace(); } return "done"; } public void onProgressUpdate(int progress) { Log.i("Thread","onProgress " + progress); } public void onPostExecute(String result) { Log.i("Thread","onPosts " + result); } 

И здесь вы можете увидеть снимок экрана моего LogCat

Журнал

Подпись метода неверна. Он должен выглядеть так:

 protected void onPostExecute(Void result) { Log.i("Thread","onPosts"); } 

Кроме того, я предлагаю вам использовать аннотацию @Override . Таким образом, вы получите ошибку времени компиляции, если вы пытаетесь переопределить неправильный метод.

Изменить: подпись, опубликованная вами в onProgressUpdate, неверна. Должен быть:

 protected void onProgressUpdate(Integer... progress){} 

AsyncTask имеет метод onProgressUpdate (Void …), который вы можете вызывать каждую итерацию, например, или каждый раз, когда прогресс выполняется во время doInBackground (), вызывая publicProgress ().

Подробнее см. В документах.

Поэтому это должно выглядеть так:

 public class DownloadFilesTask extends AsyncTask<Void, Integer, String> { protected String doInBackground(Void... params) { try { int i = 0; Log.i("Thread","1"); Thread.sleep(1000); publishProgress(i++); Log.i("Thread","2"); Thread.sleep(1000); publishProgress(i++); Log.i("Thread","3"); Thread.sleep(1000); Log.i("Thread","4"); Thread.sleep(1000); Log.i("Thread","5"); } catch (InterruptedException e) { e.printStackTrace(); } return "done"; } protected void onProgressUpdate(int progress) { Log.i("Thread","onProgress " + progress); } private void onPostExecute(String result) { Log.i("Thread","onPosts " + result); } }