Android AsyncTask的替代品

时间:2011-08-23 10:36:09

标签: android exception background android-asynctask threadpool

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

所以,我想知道除了AsyncTask之外是否还有其他替代方法可用于此用例? 克隆AsyncTask&增加核心/最大池大小似乎不是好行为,因为这意味着许多同时线程(无效的资源使用)&调度开销。 目前地址没有限制,因此可以轻松转到500多个地址。 我该如何处理这类案件?

1 个答案:

答案 0 :(得分:0)

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

我建议的另一个选择是使用Service来完成这项工作。