Android AsyncTask остается в рабочем состоянии после завершения

Во время работы над приложением я заметил, что количество потоков постоянно растет Потоки AsyncTask по какой-либо причине остаются открытыми (я уверен, что они закончили работу и завершили), я понятия не имею, почему я продолжаю создавать больше потоков этого типа, и они продолжаются бесконечно. есть ли способ проверить, что эти потоки прекращены при условии соответствия? есть ли какие-либо известные проблемы с восстановлением потоков AsyncTasks?

При запуске:

public  class DoNothingTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub
            return null;
        }

    }

я вижу в debbuger новый поток для каждого раза, когда я делаю new DoNothingTask().execute(null); как folow

Thread[<ThreadNumber>AsyncTask#1](running)

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

Спасибо, Тотем

Ответ 1

Я тоже ударился головой об этом, и просто наткнулся на этот ответ (ну, это скорее объяснение, чем ответ):

CommonsWare объясняет:

AsyncTask управляет пулом потоков, созданным с помощью ThreadPoolExecutor. Он будет иметь от 5 до 128 потоков. Если имеется более 5 потоков, эти дополнительные потоки будут удерживаться не более 10 секунд перед удалением. (обратите внимание: эти цифры для видимого в настоящее время кода с открытым исходным кодом и отличаются версией Android).

Оставьте только потоки AsyncTask.

Исходный вопрос: Нити AsyncTask никогда не умирают

Ответ 2

Я не уверен, связано ли это, но я столкнулся с подобной проблемой и в одном из моих приложений.

У меня есть активность, которая инициализирует потоки TimerTask. Задачи выполняются должным образом с заданным интервалом, но после некоторого времени простоя количество этих потоков, по-видимому, увеличивается (показывая, что потоки остаются открытыми и создаются новые потоки). Проблема заключалась в динамической загрузке и разгрузке моего приложения с помощью Android VM. Исходные потоки, которые никогда не использовались, чтобы их убивали, как и при каждой новой загрузке приложения, выполнялась инициализация потока. Вот почему общее число потоков в моем приложении увеличилось.

Есть ли аналогичная реализация в вашем приложении.

Ответ 3

Вы должны использовать

thread.join

чтобы убедиться, что поток завершен. Вы делаете это?