Ожидание завершения ASyncTask или переменной

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

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

То, что я пробовал до сих пор:

while (!task.isCancelled()) {
    // Wait... 
}

и

while (variable == null) { 
    // Wait ...
}

Я делаю лучший способ передать переменную из AsyncTask в свою активность? Если это так, то как я могу дождаться завершения задачи в активности без блокировки пользовательского интерфейса?

Ответ 1

Просто поместите свой код, который вы хотите выполнить после изменения переменной в функции, и вызовите эту функцию из onPostExecute.

Ответ 2

Если вы зависите от результата AsyncTask, вы можете сделать это.

Object result = asyncTask.execute().get();

Тип результата - это тип возвращаемого значения в методе doInBackground(). Но тогда ваш основной поток будет ждать завершения задачи.

Ответ 3

Я искал решение той же проблемы. Это работает на 100%, создавая пользовательскую функцию и используя ее в функции onPostExecute, как описано выше Аднаном Амджадом, и решил мою проблему.