我有一个UI小部件,我需要将地址映射到相应的联系人姓名并以给定的格式显示它们。我使用AsyncTask来执行查询以查找doInbackground()中的地址,并在onPostExecute()中显示小部件上的名称格式。当地址有限制时,这工作得很好。但是,当要映射的地址数量以150的顺序增加时,我得到RejectedExecutionException。我理解这是因为maxPoolsize为128,队列为AsyncTask限定为10。我试着让队列无界。但是在小部件上添加名称变得非常缓慢。这是因为与无界队列maxPoolSize被忽略,在同一时间,我只能有corePoolSize线程,即5。
所以,我想知道是否有任何替代除了AsyncTask,我可以使用这个用例??克隆AsyncTask &;增加核心/最大池大小似乎不是一个好行为,因为这将意味着许多并发线程(无效的资源使用)&调度开销。目前对地址没有限制,因此很容易超过500个。如何处理这种情况?
一种方法可以是将这大约500个地址的映射划分为大约80个的较小部分,然后为每个部分使用单独的AsyncTask。
我建议的另一种选择是使用一个服务来为你完成这项工作。