我在我的應用程序中使用了許多AsyncTask類。我總是開始使用它們:Android - 如何檢查ThreadPoolExecutor是否已達到隊列限制?
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
asyncTask.execute();
}
最近我得到了RejectedExecutionException異常。我瞭解了這一點,並理解了爲什麼會發生這種情況(超出了線程池執行程序可以在其隊列中執行的最大任務數)。
但我沒有閱讀任何關於檢查線程池執行程序是否有可用插槽的方法,以便我可以避免這種情況。從我測試的asyncTask.execute();方法沒有這個限制。
所以我在尋找這樣的事情:
if(executorCanHandlerAnotherQueue()){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
asyncTask.execute();
}
}
else{
asyncTask.execute();
}
如何向後兼容實現這個任何想法多達API 9?
謝謝你的迴應,但這不是問題。我已經知道這一點。我正在尋找的是一種類似於'boolean canExecutorAddAnotherQueue()'的方法,我可以使用它來確定是否可以將我的asyncTask添加到Executor線程池中 – Anonymous
請參閱我的更新答案,您可以使用try catch或寫入自定義處理程序爲您的情況 – Ken
你寫的方法似乎更像它。嘗試抓住似乎是一個可憐的辦法但是我不使用自定義的ThreadPoolExecutor。 AsyncTask使用它自己的。所以MAX_QUEUE_SIZE_YOU_DEFINED是AsyncTask定義的那個。根據我的理解,這取決於設備所具有的內核數量。在我的設備上測試它我發現getQueueSize()是128時拋出異常,但我不知道如何使用API獲取該數字。 – Anonymous