Вы получаете RejectedExecutionException
, потому что очередь ожидания пула потоков заполнена, и вы пытаетесь опубликовать другую задачу. Возможно, вам следует начать здесь, чтобы реорганизовать/переосмыслить свой код, потому что размер очереди, по-видимому, равен 10 плюс активный поток, которого должно быть достаточно в большинстве случаев. Очень вероятно, что некоторые из ваших задач не завершаются или выполняются долго и блокируют другие, или вы дико публикуете темы;)
Asynctask имеет 2 встроенных пула потоков:
В SDK > 11 SERIAL_EXECUTOR используется по умолчанию. Поэтому вы можете попробовать THREAD_POOL_EXECUTOR
, но имейте в виду, что это можно использовать только в SDK => 11, потому что executeOnExecutor
был более новым методом. Это решит вашу непосредственную проблему, но вам, возможно, следует пересмотреть, нужно ли вам столько потоков. Или используйте другие методы, например. services, если у вас много длительных задач.
В качестве альтернативы, если вам нужен собственный ThreadPool, вы можете создать его с помощью Executors: например. Executors.newCachedThreadPool( ) (среди других статических конструкторов).
person
Patrick Favre
schedule
21.06.2014