У меня есть виджет пользовательского интерфейса, в котором мне нужно сопоставить адреса с соответствующими именами контактов и отображать их в заданном формате.
Я использую AsyncTask для выполнения запроса для поиска адреса в doInbackground () и отображения формата имени на виджете в onPostExecute ().
Это прекрасно работает, когда есть ограничение на адреса.
Но когда количество адресов, подлежащих сопоставлению, увеличивается ... порядка 150, я получаю исключение RejectedExecutionException.
Я понимаю, что это потому, что maxPoolsize 128 и очередь ограничена 10 для AsyncTask.
Я пытался сделать очередь неограниченной ... но добавление имен в виджет становится очень медленным. Это потому, что с неограниченной очередью maxPoolSize игнорируется, и в то же время я могу иметь только потоки corePoolSize, т.е. 5.
Итак, я хотел знать, есть ли какая-либо альтернатива, кроме AsyncTask, которую я могу использовать для этого варианта использования ??
Клонирование AsyncTask и увеличение размера основного / максимального пула, похоже, не является хорошим поведением, так как это будет означать много одновременных потоков (неэффективное использование ресурсов) и затраты на планирование.
В настоящее время нет никаких ограничений на адреса, и, следовательно, он может легко перейти на более чем 500.
Как мне обращаться с такими случаями?