Intereting Posts
Удаление данных из ArrayList с помощью цикла For-loop Java.lang.IllegalStateException: ScrollView может содержать только один прямой дочерний Инструмент для тестирования UI и Android от ADT21 Как переопределить выбор текста по умолчанию в Android-браузере os 4.1+? Как сохранить изображение в галерее Android Кодировать / декодировать AndroidManifest.xml внутри APK Как сохранить изображения, отображаемые в webview? SwiperefreshLayout в Android Эмулятор: ПРЕДУПРЕЖДЕНИЕ: Классический qemu не поддерживает SMP. Параметр hw.cpu.ncore из вашего файла конфигурации игнорируется Преобразование JSONarray в ArrayList Есть ли стандарт документации для пользовательских атрибутов стиля XML в Android? Камера FLASH_MODE_ON не работает на Moto X Мигает экран при использовании веб-просмотра со вспышкой Можно ли рисовать прямоугольник в XML? UnsatisfiedLinkError: dlopen failed: не удается найти символ «strtof», на который ссылается «libsupportjni.so» на API <20

Нити AsyncTask никогда не умирают

Я использую AsyncTask s для извлечения данных в ответ на нажатие кнопки пользователем. Это хорошо работает и поддерживает взаимодействие интерфейса при извлечении данных, но когда я проверил, что происходит в отладчике Eclipse, я узнал, что каждый раз, когда создавалась новая AsyncTask (что довольно часто, потому что их можно использовать только Один раз), новый поток создавался, но никогда не прерывался.

Результатом является большое количество потоков AsyncTask просто сидят там. Я не уверен, что это проблема на практике или нет, но я бы очень хотел избавиться от этих дополнительных потоков.

Как я могу убить эти потоки?

Solutions Collecting From Web of "Нити AsyncTask никогда не умирают"

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

AsyncTask только потоки AsyncTask .

В дополнение к ответу CommonsWare:

В настоящее время я использую Android 2.2, и мое приложение использует не более одной AsyncTask в любое время, но я создаю новую каждые x минут. Сначала появляются новые потоки AsyncTask (новый поток для новой AsyncTask), но после 5 потоков (как упоминалось в CommonsWare) они просто остаются видимыми в окне отладки и снова используются, когда нужны новые потоки AsyncTask. Они просто остаются там, пока отладчик не отключится.

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

  myActiveTask.executeOnExecutor(Executors.newSingleThreadExecutor()); 

Это заставило поток исчезнуть после завершения его работы.