2014/11/12

ListView自我更新多次

剛剛開發一個有ListView的Activity,從SQLite資料庫取出資料,透過adapter將資料顯示在ListView上
資料庫中的測試資料總共有20筆
當畫面進入到這個Activity時,發現得花超過三四秒,才能將這些items顯示出來 (ASUS Nexus 7)

一開始以為是SQLite的效能太差,所以要花這麼長的時間,可是才20筆資料就花這麼多時間,效能也未免太差了
(select * from XXX order by YYY desc)
進入debug模式,發現其實從資料庫撈資料的速度很快,顯然不是SQLite的問題

經過一番追蹤,發現adapter裡的getView被呼叫了80次
才20筆資料,getView被叫了80次,也就是做了4次refresh
為什麼?

經過一番折騰與閱讀,總算知道主要原因是那個ListView的height設定為wrap_content,Android為了要將高度調整能wrap content,可能就必須不斷做載入與調整,也因此才會refresh了多次。
當把height改成match_parent時,果然這個現象就不會發生了。

沒有留言: