Завершение AsyncTask по запросу - PullRequest
1 голос
/ 01 октября 2011

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

Это все работает нормально, за исключением того, что я не могу принудительно завершить фоновую задачу, когда пользователь выбирает?!? Когда пользователь выбирает «Готово», у меня есть следующее:

computerSolutionTask.cancel(true);

// ...disable some GUI buttons etc...

while (computerSolutionTask.getStatus() != AsyncTask.Status.FINISHED){
   // ...do nothing...
}
txt_computer.setText(computerSolutionTask.get());

И в моем классе AsyncTask я регулярно проверяю isCancelled (), но кажется, что он просто зависает в цикле while, который я включил выше.

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

Эта ветка , кажется, задает тот же вопрос, что и я, но не имеет решения ... Я пока рисую пробелы во всех своих исследованиях, и любая помощь будет очень полезной. оценили.

Ответы [ 2 ]

1 голос
/ 01 октября 2011

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

0 голосов
/ 01 октября 2011

Вам нужно поместить условие в метод doInBackground (), чтобы проверить, отменена ли AsyncTask или находится в рабочем состоянии.

 protected Object doInBackground(Object... x) 
    { 
        while (/* condition */)
        {

        // work...

        if (isCancelled())  break;

        } return null; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...