2011-08-23 49 views
1

我有一个UI小部件,我需要将地址映射到相应的联系人姓名并以给定的格式显示它们。 我使用AsyncTask执行查询以查找doInbackground()中的地址并在onPostExecute()中的小部件上显示名称格式。 这对地址有限制时正常工作。 但是,当要映射的地址数量增加到150时,我得到RejectedExecutionException。 据我所知,这是因为maxPoolsize为128,AsyncTask的队列被限制为10。 我试图让队列无界限......但在小部​​件上添加名称变得非常缓慢。这是因为无限队列maxPoolSize被忽略,并且一次只能有corePoolSize线程,即5.Android的替代AsyncTask

所以,我想知道是否有任何其他方法可以用于此用例的AsyncTask? ? 克隆AsyncTask &增加核心/最大池大小似乎不是好行为,因为这意味着许多并发线程(无效的资源使用)调度开销&。 地址目前没有限制,因此它可以轻松地超过500. 我应该如何处理这种情况?

回答

0

一种方法可能是将大约500个地址映射到大约80个较小的部分,然后为每个部分使用单独的AsyncTask。

另一个我会推荐的方法是使用Service为你做这项工作。

+0

这将意味着直到80个地址没有被解析,即查询,UI上将不会有更新....如何在这种情况下使用服务? – deeps