Android怎樣調用系統類,Android ListView反復調用getView和getCount

 2023-10-31 阅读 19 评论 0

摘要:最近做項目發現一個界面當有ListView是,getView和getCount中的log被瘋狂調用。一個5個Item的ListView,getView竟然會被反復調用7組。尤其是當ItemView中需要加載圖片時,很容易造成GC過多,很容易出現ANR。 原因就在于measure過程,ListView一
最近做項目發現一個界面當有ListView是,getView和getCount中的log被瘋狂調用。一個5個Item的ListView,getView竟然會被反復調用7組。尤其是當ItemView中需要加載圖片時,很容易造成GC過多,很容易出現ANR。

原因就在于measure過程,ListView一般都會有好多個Item,而且也會同時顯示若干組Item,這些Item的父元素都是這個ListView。Android怎樣調用系統類。

更具Google的解釋,View在Draw的時候分成兩個階段:measure和layout,在measure階段時主要就是為了計算兩個參數:height和width。而且要注意的是,這是個遞歸的過程,從頂向下,DecorView開始依次調用自己子元素的measure。計算完成這兩個參數后就開始layout,最后再是draw的調用。

對于ListView,當然每一個Item都會被調用measure方法,而在這個過程中getView和getCount會被調用,而且看用戶的需求,可能會有很多次調用。Android使用自帶文件、

而為什么會有很多組次調用呢?

問題就在于在layout中的決定ListView或者它的父元素的height和width屬性的定義了。fill_parent會好一點,計算方法會比較簡單,只要跟父元素的大小相似就行,但是即使是fill_parent,也不能給View當飯吃,還是要計算出來具體的dip,所以measure還是會被調用,只是可能比wrap_content的少一點。至于自適應的它會一直考量它的寬和高,根據內容(也就是它的子Item)計算寬高。可能這個measure過程會反復執行,如果父元素也是wrap_content,這個過程會更加漫長。Android瀏覽器調用接口,

所以,解決方法就是盡量避免自適應,除非是萬不得已,固定大小或者填充的效果會比較好一些。








當我們在使用listview的時候。有時候自定義adapter的時候,是不是會發現在getview里打印日志的時候,重復調用很多次?有時候4次。有的嚴重甚至到10次,當我們在listview中移動的時候。Android調用外部xml布局?每移動一列都會調用很多次,這樣大大影響到效率!其實這和listview本身在android上的機制有關。下面我開始來介紹一下吧:

在布局,我們只有一個listview的時候。那好。我們把高設置成wrap_content的時候。android文件選擇、在listview里加載幾行看看。日志在getview里打印一下。是不是重復調用了?那這個辦法就好弄了。把高設置成fill_parent就成了。nestedscrollview嵌套recyclerview。這個時候發現日志還是重復調用?那就要看一下Listview的上一級而已的高是不是也是設置也fill_parent的,如果不是。請改動吧。如果是。那我還真沒碰到重復調用的!因為測試好幾次了!

如果我們在而已里不只一個Listview。Android9編譯系統?一個復雜好看的布局可能有很多。listview在布局的某個地方。這個時候有時候運氣不好。你會發現你調用了很多次getview。我測試的時候。最高230次。可想而知。這個速度是相當慢。而且每移動一次就是調用這么多次!對于這樣的情況,在修改布局的時候,要考慮以下兩點:1.首先考慮需求布局和性能哪個更重要一點。2.考慮listview周邊哪個布局控件影響到了它!

如果在性能上沒有太大影響,而需求要求必需是那樣的布局。那就以布局為主。看看有沒有別的方法來優化一下listview,當然前提是布局一點都不能調整。如果能調整,布局沒有太大變動。而listview又能很好的優化。那就當然優化了!當我們優化的時候。首先要看一下有沒有影響到Listview重繪的控件,比如。如果它上面和下面都有控件。而且高都是wrap_content,那么你就要設置成fill_parent或者固定高。這樣listview在高上就不會重繪,這是最主要的一點。那左右是不是也有控件(一般一個手機頁面用到list的時候不會有這么多控件)?有,那我們就也要調整,那就同高一樣的設置。一定要讓listview是一個固定在那個地方不動的。不然,你就等著讓他重復去調用吧!

其實說了這么多。最主要的還是在我們進行布局的時候。要巧妙的運用每個控件的屬性,以及了解控件每個的原理。這樣在我們進行UI設計的時候,才能很好的去結合!

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/165696.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息