AsyncTask - как дождаться завершения onPostExecute (), прежде чем использовать обновленные значения - PullRequest
4 голосов
/ 27 июля 2011

У меня есть API в одном банке, который использует AsyncTask для выполнения некоторой работы в фоновом режиме. Мне нужно подождать, пока результат будет возвращен, а затем сделать еще несколько работ с этим результатом.

Я возвращаю один класс в методе onPostExecute () и затем результат обрабатывается в потоке пользовательского интерфейса, но обработчик должен быть определен как обратный вызов в другом проекте, поэтому я не могу просто выполнить работу onPostExecute.

Во втором проекте мне нужно дождаться окончания AsyncTask и обработки ответа, затем мне нужно отобразить результаты обработчика для TextView в действии во втором проекте ,

Thread.sleep и использование CountDownLatch не работают, потому что обработка выполняется в потоке пользовательского интерфейса. Есть ли способ сделать такую ​​вещь?

1 Ответ

2 голосов
/ 27 июля 2011

Если я правильно понимаю, у вас есть AsyncTask в одной банке и пользовательский интерфейс, который необходимо обновить в другой банке. Если вы запускаете их как одно приложение, не должно иметь значения, где они находятся. Поскольку вы упомянули, что задействован некоторый обратный вызов, вы можете просто выполнить этот обратный вызов в onPostExecute.

Ниже будет примерная последовательность событий

  • Активность из jar 2 создает асинхронную задачу и передает обратный вызов, который знает, как обновить TextView в качестве параметра для конструктора
  • AsyncTask сохраняет обратный вызов в переменной экземпляра
  • Активность выполняется AsyncTask
  • AsyncTask в onPostExecute вызывает метод обратного вызова с соответствующими параметрами
  • Обновления обратного вызова TextView
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...