Альтернатива Android AsyncTask - PullRequest
       26

Альтернатива Android AsyncTask

1 голос
/ 23 августа 2011

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

Итак, я хотел знать, есть ли какая-либо альтернатива, кроме AsyncTask, которую я могу использовать для этого варианта использования ?? Клонирование AsyncTask и увеличение размера основного / максимального пула, похоже, не является хорошим поведением, так как это будет означать много одновременных потоков (неэффективное использование ресурсов) и затраты на планирование. В настоящее время нет никаких ограничений на адреса, и, следовательно, он может легко перейти на более чем 500. Как мне обращаться с такими случаями?

1 Ответ

0 голосов
/ 23 августа 2011

Один из подходов может состоять в том, чтобы разделить отображение этих примерно 500 адресов на более мелкие части, около 80, а затем использовать отдельный AsyncTask для каждой части.

Другая альтернатива, которую я бы порекомендовал, - это использовать Служба , которая делает эту работу за вас.

...