Что убивает Android AsyncTask? - PullRequest
       0

Что убивает Android AsyncTask?

1 голос
/ 18 августа 2010

PrintStatusTask анализирует содержимое почтового ящика gmail в поисках различных элементов, представляющих интерес для отчета. Но новый AsyncTask создается для каждого PrintStatusTask (). Execute () в соответствии с отладчиком. Разве эти задачи не должны умереть при выходе? Их нужно убивать вручную?

public class Controller extends Activity {
    ...
    private boolean applyMenuChoice(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.menuStatus:
            new PrintStatusTask().execute();
            ...
    class PrintStatusTask extends AsyncTask<Void, String, Void> {
        @Override
        protected Void doInBackground(Void... unused) {
            ...
            return null;
        }
        @Override
        protected void onPostExecute(Void unused) {
            this.cancel(true);
        }   
    }
}

Ответы [ 3 ]

5 голосов
/ 18 августа 2010

Я нашел хороший ответ здесь .

5 голосов
/ 29 октября 2011

Хорошо, ребята, извините, но я должен сказать вам, что вы не правы.AsyncTask (почти) НИКОГДА не убит.Вызов AsyncTask.cancel НЕ убьет задачу.

Цитируется из документации AsyncTask

Задачу можно отменить в любое время, вызвав метод Cancel (логический).Вызов этого метода приведет к тому, что последующие вызовы isCancelled () вернут true.После вызова этого метода onCancelled (Object) вместо onPostExecute (Object) будет вызываться после возврата doInBackground (Object []).Чтобы отменить задачу как можно быстрее, всегда следует периодически проверять возвращаемое значение isCancelled () из doInBackground (Object []), если это возможно (например, внутри цикла.)

чтение документов может быть полезным ... Итак, я подведу итог для вас, но так как я уже ответил в другом посте, я отправляю вам на него: Как я могу устанавливать асинхронные URL-соединения на Android?

Я обошел вашу проблему, и да, какое-то время некоторые AsyncTask были убиты.Но я не буду рекомендовать их использовать, они бесполезны.Но с тех пор ваши AsyncTasks должны отображать статус «ожидания», если они закончили с задачей.В противном случае ваша задача НЕ выполнена, и я никогда не слышал об ошибке, связанной с просмотром потока adb.

С уважением!

1 голос
/ 18 августа 2010

Если вы сохраняете ссылку на задачу, вы можете вызвать ее метод cancel, чтобы отменить ее.В противном случае они живут так же долго, как и процесс вашего приложения, или пока они не вернутся из функций doInBackground и (если есть) onPostExecute.

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