我有一個相當簡單的列表,每行有3個textview字段。我們正在與數據從後臺Web服務調用(的AsyncTask)來更新每2秒或他們的價值觀,從而Listview的ArrayAdapter notifydatasetchanged()非常緩慢的重繪
我們比較與當前那些未來值,相應地更新他們的適配器,最後調用notifyDataSetChanged()如果需要
事情是,當我們一次獲得3個以上的更新行時,重繪變得非常慢,從而掛起整個UI。當然,我們正在使用所有ListView衆所周知的優化,如EfficientAdapter方法(setTag()和持有者)和getViewTypecount()/ getItemViewType()。我們還試圖儘可能優化我們的界面,並儘量避免wrap_content寬度和高度來減輕事情發展。
我們不會對我們的更新執行昂貴的操作,只是標準的東西:更改TextView文本,textcolor和backgroundcolor值。
唯一奇怪的事情,我可以看到的是,getView()被調用的每一行3-4-5次,雖然我讀過所有的羅曼的消息[1],告訴這是沒有錯的
任何想法或提示我們如何加快速度?
非常感謝!
它幾乎聽起來像你獲得更多的更新比你能夠繪製 - 你試過減少更新頻率到10秒來測試這個?如果這有幫助,您將需要找到一個解決方案,以便在每次更新時從任務中清除隊列。如果您認爲自動垃圾收集可能需要1秒鐘(希望不會更多),並且其他服務可能會延遲更新,那麼通常會有2秒的時間。 – 2010-09-27 16:33:40
調用是連續的,所以當前一個完成時執行新的調用。 – Albert 2010-09-28 07:44:24
垃圾收集器最糟糕的情況需要超過200毫秒,與應用程序在每次重繪時遇到的1.5 - 2秒UI掛起相比,這並不算什麼。 刷新頻率在這裏沒有影響,即使我將它提高到10秒,在通話結束後重繪也會繼續凍結2秒 – Albert 2010-09-28 07:44:24