Мое Android-приложение должно иметь дело с поступающими сообщениями, которые часто бывают в пучках (особенно в периоды щекотливой связи). Я обрабатываю эти входящие сообщения в AsyncTasks, чтобы я не вмешивался в поток пользовательского интерфейса. Если сразу приходит слишком много сообщений, я получаю RejectedExecutionException
. Мой стек ошибок выглядит следующим образом:
10-22 14:44:49.398: E/AndroidRuntime(17834): Caused by: java.util.concurrent.RejectedExecutionException: Task [email protected] rejected from [email protected][Running, pool size = 128, active threads = 22, queued tasks = 0, completed tasks = 1323]
10-22 14:44:49.398: E/AndroidRuntime(17834): at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1967)
10-22 14:44:49.398: E/AndroidRuntime(17834): at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:782)
10-22 14:44:49.398: E/AndroidRuntime(17834): at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1303)
10-22 14:44:49.398: E/AndroidRuntime(17834): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:564)
Я запускаю задачи с task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
, чтобы поступающие сообщения обрабатывались параллельно.
Что сбивает с толку об этом и отличается от связанных вопросов StackOverflow, которые я могу найти (например, здесь и здесь) состоит в том, что количество активных потоков и задач в очереди не похоже на то, что они сталкиваются с ограничениями (которые, как представляется, составляют 128 и 10 соответственно). Смотрите stacktrace:
[email protected][Running, pool size = 128, active threads = 22, queued tasks = 0, completed tasks = 1323]
Почему я должен получать это сообщение об ошибке?