2012-01-09 83 views
3

我的性能對比,特別是滾動ListView的速度,我創建的應用程序,以原生Android 4.0的應用程序 - 的Gmail,Gtalk的,等原生Android 4.0應用程序如何快速滾動ListViews?

有一兩件事我注意到的是,一個ListView的滾動幀率原生Android應用程序非常高 - 幾乎60fps。在我的應用程序中,ListView的滾動速度幾乎沒有那麼快。

假設我使用ListView錯誤(這我不是 - 我已經按照這裏的一切表示:http://www.youtube.com/watch?v=wDBM6wVEO70),我決定創建一個虛擬ListView只返回了十幾幾乎是空的LinearLayout意見,因爲它是行(是的我正確使用convertView)。什麼是令人不安這裏是我的幾乎空白ListView比任何本機應用程序的滾動性能下降 - 的Gmail,Gtalk的,聯繫人等

作爲一個方面說明,一個簡單的ScrollView具有真正好的滾動性能,但它是不可取爲大型列表使用ScrollView

很明顯,本機應用程序正在做某件事(或有權訪問某件事物),我不明白。不幸的是這些原生應用程序不是開源的。有沒有人對這些原生應用程序如何實現如此巨大的性能有所瞭解?

回答

0

有一些技術可以使ListView更快:緩存和使用不相關的列表項目作爲新的列表項目以避免長時間創建它們。您需要根據ListView創建自己的課程來實現這些技巧。閱讀更多here

+0

根據此視頻,絕對不建議緩存視圖:http://www.youtube.com/watch?v=wDBM6wVEO70 – 2012-01-09 05:23:44

0

我也跟着那個視頻來建立我的列表視圖。在我的應用程序中,沒有太多項目(行)。但我認爲,如果我們按照視頻所說的那樣行事,至少在理論上我們是正確的?

+0

我同意理論上只要我們跟着視頻,我們就走在正確的軌道上。但是將結果與本機應用程序進行比較則證明不然 – 2012-01-09 15:17:53

1

查看本機電子郵件應用程序的源代碼後,我發現郵件列表中的列表項是單視圖,而不是像LinearLayout這樣的ViewGroups。這使得一個非常平坦的View層次結構在滾動列表的同時導致更好的幀速率。我想我記得看過Romain Guy(一位Android UI領導人之一)的演講視頻,他提到Gmail團隊做了類似的工作來提高性能。要自己做到這一點,你必須繼承View的子類並在onDraw()方法中查看你自己的所有內容。

Here是當前電子郵件應用程序中消息列表項的來源。

他們在你膨脹一個視圖(但不附加它)的情況下做了一個很酷的技巧,根據它所在的ViewGroup獲取項目去的座標,並緩存座標在一個Map中,在列表中循環使用,您不必再次誇大該視圖。我可能會在我的未來項目中嘗試這個!

我希望這有助於!