18

私の 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]

このエラー メッセージが表示されるのはなぜですか?

4

2 に答える 2

11

この例外は、Executor が shutdown メソッドを呼び出し、その後、実行のために新しい Task (Runnable) を指定した場合にも発生します。お気に入り

mThreadPoolExecutor.shutdown();
...
...
...
mThreadPoolExecutor.execute(new Runnable(){...});
于 2014-06-10T06:27:29.190 に答える