Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
ILNAR_93
Android
217 / 217 / 21
Регистрация: 19.01.2013
Сообщений: 1,598
Записей в блоге: 2
#1

Запуск нескольких AsyncTask - Android

20.05.2014, 15:42. Просмотров 1199. Ответов 5
Метки нет (Все метки)

Есть ListView там чекбоксы, при нажатии на чекбох запускается поток..

Java
1
2
AsyncTaskWASAQ  task = new AsyncTaskWASAQ();
task.execute();
если пользователь сразу выберет несколько пунктов то запустятся несколько одинаковых потоком т.е. несколько раз выполнится след. код
Java
1
2
AsyncTaskWASAQ  task = new AsyncTaskWASAQ();
task.execute();

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

как это можно по умному сделать ? так чтобы активной всегда оставался только один поток, (id каждому потоку давать чтоли ?))))) )

и почему он только не пересоздается ? все время же task.execute(); а тут как будто
создается
task.execute1();
task.execute2();
task.execute3();

.....
...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2014, 15:42     Запуск нескольких AsyncTask
Посмотрите здесь:

Android AsyncTask+CheckBox
Запуск AsyncTask при повороте девайса Android
Android Exception в AsyncTask
Android AsyncTask и Jsoup
Android Работа с AsyncTask
Android AsyncTask
Android AsyncTask и get()
AsyncTask Android
Android Отмена AsyncTask
AsyncTask и SQLite Android
AsyncTask Android
Android Не работает AsyncTask

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
20.05.2014, 15:51     Запуск нескольких AsyncTask #2
kaspersky, если посмореть исходник асинктаски, то одновременно может выполняться только 1 асинктаска, если она была вызвана методом execute(). Все остальные будут становится в очередь. Опасно появлением RejectedExecutionException из-за переполнения пула 128/10.

Вам надо написать какой-нибудь механизм, который будет ожидать допустим 3 секунды с последнего действия пользователя. Если за эти 3 секунды ничего юзер не добавил/убрал - запускаем, если всё же добавил - тогда сбрасываем таймер снова на 0.
ILNAR_93
Android
217 / 217 / 21
Регистрация: 19.01.2013
Сообщений: 1,598
Записей в блоге: 2
20.05.2014, 16:00  [ТС]     Запуск нескольких AsyncTask #3
YuraAAA, а у таска нету такого метода для автоматического завершения ? или чтобы жестко его завершать ?

я бы работал с task cansel но у меня в таск только одна объемная функция выполняется и все и я не как не проверю cansel

Цитата Сообщение от YuraAAA Посмотреть сообщение
который будет ожидать допустим 3 секунды
этот метод хотел использовать в крайней мере если не найду другой выход, т.к. список объемный (Listview) и пользователь с верху может 3 пункта выбрать и вниз крутить а поток там уже начнется а потом он с низу еще выберет и тогда поток все равно опять начнется (вот у меня уже 2 потока)

Добавлено через 1 минуту
Цитата Сообщение от YuraAAA Посмотреть сообщение
Опасно появлением RejectedExecutionException
типо если много потоков одновременно запускать ? крах приложения ?
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
20.05.2014, 16:03     Запуск нескольких AsyncTask #4
kaspersky, если более 128 - крэш. Переполнение пула потоков.

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

А что делает поток? В интернет лезет?
ILNAR_93
Android
217 / 217 / 21
Регистрация: 19.01.2013
Сообщений: 1,598
Записей в блоге: 2
21.05.2014, 09:00  [ТС]     Запуск нескольких AsyncTask #5
Цитата Сообщение от YuraAAA Посмотреть сообщение
А что делает поток? В интернет лезет?
Да, скачивает инфу по выбранным объектам

Добавлено через 2 минуты
Цитата Сообщение от YuraAAA Посмотреть сообщение
если более 128 - крэш
а когда поток выполняется он из пула самостоятельно очиститься ?

т.е. по мере выполнения потоков они будут само уничтожаться ? или пока мусоросборщик не пройдет он будет в пуле ?
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
21.05.2014, 10:11     Запуск нескольких AsyncTask #6
kaspersky,
Цитата Сообщение от kaspersky Посмотреть сообщение
Да, скачивает инфу по выбранным объектам
Советую всё же какую-нибудь кнопку подтверждения.

Цитата Сообщение от kaspersky Посмотреть сообщение
а когда поток выполняется он из пула самостоятельно очиститься ?
Да, да, всё верно
Yandex
Объявления
21.05.2014, 10:11     Запуск нескольких AsyncTask
Ответ Создать тему
Опции темы

Текущее время: 22:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru