getview与getcount被反复调用

转载 2012年03月25日 21:49:46

最近做项目发现一个界面当有ListView是,getView和getCount中的log被疯狂调用。一个5个Item的ListView,getView竟然会被反复调用7组。尤其是当ItemView中需要加载图片时,很容易造成GC过多,很容易出现ANR。

原因就在于measure过程,ListView一般都会有好多个Item,而且也会同时显示若干组Item,这些Item的父元素都是这个ListView。

更具Google的解释,View在Draw的时候分成两个阶段:measure和layout,在measure阶段时主要就是为了计算两个参数:height和width。而且要注意的是,这是个递归的过程,从顶向下,DecorView开始依次调用自己子元素的measure。计算完成这两个参数后就开始layout,最后再是draw的调用。

对于ListView,当然每一个Item都会被调用measure方法,而在这个过程中getView和getCount会被调用,而且看用户的需求,可能会有很多次调用。

而为什么会有很多组次调用呢?

问题就在于在layout中的决定ListView或者它的父元素的height和width属性的定义了。fill_parent会好一点,计算方法会比较简单,只要跟父元素的大小相似就行,但是即使是fill_parent,也不能给View当饭吃,还是要计算出来具体的dip,所以measure还是会被调用,只是可能比wrap_content的少一点。至于自适应的它会一直考量它的宽和高,根据内容(也就是它的子Item)计算宽高。可能这个measure过程会反复执行,如果父元素也是wrap_content,这个过程会更加漫长。

所以,解决方法就是尽量避免自适应,除非是万不得已,固定大小或者填充的效果会比较好一些。


相关文章推荐

Android ListView反复调用getView和getCount

做项目发现一个界面当有ListView是,getView和getCount中的log被疯狂调用。一个5个Item的ListView,getView竟然会被反复调用7组。尤其是当ItemView中需要加...

Android AbsListView子类反复调用getView()和getCount()问题分析

对于AbsListView子类,假设它的宽高是自适应的,你会发现getView()和getCount()会被疯狂的反复调用。即使在AbsListView子类设置完adapter后,getView()和...

Android中的GridView反复调用getView和getCount,并且getView中的position的值几乎都是0

最近做项目发现一个界面当用到GridView的时候,getView和getCount中的log被疯狂调用,并且getVIew中的LOG每出来一次就是四条,并且这四条数据的position的值都是0。一...

android listview getview多调用俩周期

  • 2016年01月22日 10:53
  • 1.56MB
  • 下载

gridview position =0多次调用getView, 如果有异步加载,那会导致程序效率低,并且导致position=0的控件显示有问题

问题:gridview  position =0多次调用getView, 如果有异步加载,那会导致程序效率低,并且导致position=0的控件显示有问题。 查找了些资料,大概是因为gridview需...
  • juishi
  • juishi
  • 2016年03月05日 23:05
  • 908

gallery 中的getview 中 当position是0的时候 调用两次问题

在项目中遇到了一个问题,当你进入有gallery的activity时, gallery中的第一张图片加载不出来,  滑动之后或者重新进入之后才能显示,  原因是,第一次进入的时候,getview 调用...

解决ListView,Gallery的Adapter中由于布局问题导致的getView多次调用问题

由于布局很复杂,我的listview嵌套了好多层,导致adapter中getview方法调用了多达几百次!!!因为要计算很多次父控件的高度!!!而且在点击edittext控件时,弹出或者收回输入法的时...

GridView重复调用getView有关问题

使用GridView控件,却发现getView被重复调用,次数多达上百次,拖垮了系统,影响用户体验! public View getView(int position, View conver...
  • jdsjlzx
  • jdsjlzx
  • 2013年01月06日 16:51
  • 5986
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:getview与getcount被反复调用
举报原因:
原因补充:

(最多只允许输入30个字)