Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
ILNAR_93
Android
237 / 237 / 49
Регистрация: 19.01.2013
Сообщений: 1,876
Записей в блоге: 3
#1

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

20.05.2014, 15:42. Просмотров 1565. Ответов 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();

.....
...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2014, 15:42
Ответы с готовыми решениями:

Запуск AsyncTask при повороте девайса
Здравствуйте, мне нужно запустить AsyncTask при повороте девайса... код есть...

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

AsyncTask
Использую AsyncTasc class MyT extends AsyncTask<Void, Void, Void> { ...

AsyncTask и get()
Создаю асинхронный процесс, где в onPreExecute() запускаю анимированный...

AsyncTask
Привет. Знаю, что в AsyncTask doInBackground() обращатся к компонентам UI...

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

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

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

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

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

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

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

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

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

Цитата Сообщение от kaspersky Посмотреть сообщение
а когда поток выполняется он из пула самостоятельно очиститься ?
Да, да, всё верно
1
21.05.2014, 10:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2014, 10:11

AsyncTask тормозит
Подскажите пожалуйста, делалю загрузку данных с сервера через asyncTask и...

AsyncTask+CheckBox
Здравствуйте, интересует вопрос нужно в функцию AsyncTask послать несколько...

MainActivity AsyncTask
Добрый вечер. Ребята тут небольшая проблема. Мне нужно Заполнить...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru