2011-05-25 69 views
2

我們有一個數據驅動的活動,它構造了一個大型的按鈕式組件(通常爲100個),並將它們置於Scrollable中。每個按鈕都從資源中膨脹並基於RelativeLayout。該按鈕有兩個文本視圖,兩個圖像視圖 - 均來自資源 - 並具有9補丁的背景。應對Android上的複雜佈局

圖像視圖的大小,位置,文本和配置都是從數據庫查詢中驅動的。

不幸的是,這需要2-3秒的時間在HTC Desire上進行佈局,在HTC San Francisco或HTC Sapphire上進行3-5秒。

初始佈局完成後,視圖執行得很漂亮。

我們已經嘗試了一些它沒有什麼區別策略:

  • 時間的數據庫查詢 - 這不是延遲的顯著部分。
  • 緩存按鈕,減少佈局膨脹量。
  • 在「實時」視圖層次結構之外構建視圖的子樹,然後在完成時連接它。
  • 在另一個線程上執行相同操作,但將子樹連接到UI線程上的活動。

我們有一個不確定的進度指示器(微調器/跳動器),它在查詢在另一個線程上運行時旋轉,但在佈局開始時凍結。

所以,我的問題是這些:

  • 我怎樣才能使意見的佈局似乎更加敏感
  • 我怎樣才能避免thobber鎖定了,而佈局發生

謝謝。

編輯

滾輪被設置爲水平和垂直滾動。所以我們有一個網格,屏幕是一個視口。

這使得使用內置ListView(乍一看)不適合該任務。

+0

我用它來改善響應性http://stackoverflow.com/questions/2293488/improve-listview-efficiency-when-loading-images-from-sd-into-the-listview – GPSmaster 2011-05-25 22:32:13

回答

0

佈局過程中不會重繪進度指示器,因爲它全部發生在UI線程中。

爲了提高性能,您應該使用ListView,它可以滾動,並且可以自定義項目(您可以重新使用基於RelativeLayout的「按鈕」)和自定義適配器,並且它允許在滾動時回收項目。見Recycling views in a listview, worth it?,最重要的是這個excerpt from CommonsWare's book on Android

+0

列表視圖不適合對於數據,因爲網格需要水平滾動和垂直滾動。 – jamesh 2011-05-26 09:05:56