2011-08-23 78 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