私の Android アプリは、頻繁に大量に届くメッセージの受信に対処する必要があります (特に不安定な接続の期間中)。これらの着信メッセージは AsyncTasks で処理して、UI スレッドに干渉しないようにしています。一度に大量のメッセージが届くと、RejectedExecutionException
. 私のエラースタックは次のようになります:
10-22 14:44:49.398: E/AndroidRuntime(17834): Caused by: java.util.concurrent.RejectedExecutionException: Task android.os.AsyncTask$3@414cbe68 rejected from java.util.concurrent.ThreadPoolExecutor@412716b8[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 の質問 (例: hereおよびhere ) とは異なるのは、アクティブなスレッドとキューに入れられたタスクの数が制限 (128 のように見える) に達していないように見えることです。および 10、それぞれ)。スタック トレースを参照してください。
ThreadPoolExecutor@412716b8[Running, pool size = 128, active threads = 22, queued tasks = 0, completed tasks = 1323]
このエラー メッセージが表示されるのはなぜですか?