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中的GridView反复调用getView和getCount,并且getView中的position的值几乎都是0

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

解决getView()方法反复执行

ListView GridView getView 反复执行
  • caterwind
  • caterwind
  • 2016年07月14日 20:05
  • 412

Android ListView优化之getView频繁多次调用与ViewHolder工作原理

Android中我们经常会用到ListView,然后ListView到底是如何通过ViewHolder去优化的? 1.常见的适配器中利用ViewHolder去优化ListView的代码 @Overri...
  • u010785585
  • u010785585
  • 2016年11月06日 20:26
  • 2810

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

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

ListView和GridView多次调用GetView的现象和解决办法

背景:以前遇到过,最近又碰到了,就总结一下吧 一.ListView (1)出现原因 是因为listView的高度不确定,一般用的是wrap_content,导致系统需要不断地测量,也就是多测调用onM...
  • u011889786
  • u011889786
  • 2016年08月07日 17:12
  • 2580

Adapter不调用getView()的可能

接着写上个哥们留下来的项目,里面有个gridView用BaseAdapt适配,结果死活没有显示,打了日志之后发现getView()也没有被调用.getView()不调用有一下几种可能 getCount...
  • wjoker
  • wjoker
  • 2016年04月28日 15:23
  • 1159

关于ListView的getView方法被多次重复调用的问题

package com.pxy.demo.adapter; import java.util.ArrayList; import com.pxy.demo.R; import android.c...
  • LoveBugzzz
  • LoveBugzzz
  • 2016年09月17日 14:03
  • 2504

GridView重复调用getView有关问题

使用GridView控件,却发现getView被重复调用,次数多达上百次,拖垮了系统,影响用户体验! public View getView(int position, View conver...
  • jdsjlzx
  • jdsjlzx
  • 2013年01月06日 16:51
  • 6095

ListView无法执行getView()的几种可能问题

在遇到这个问题过后,在网上翻阅了一些资料,找到了一些思路,一下问题的解释来自一位大神,觉得非常有用,就收藏记录下来。  listview是一个比较常用的控件,为了适应自己需要的效果往往会继承b...
  • zqsong5
  • zqsong5
  • 2017年04月11日 17:25
  • 229

Android中getView与inflate方法的详解

先来讲解几个知识点: 1 BaseAdapter: 任意的ListView都需要一个适配器,这里就拿自定义的适配器来说,比如我们自己定义了一个适配器MyAdapter,然后让这个适配器继承了Bas...
  • qq_15771061
  • qq_15771061
  • 2015年09月20日 22:38
  • 1810
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:getview与getcount被反复调用
举报原因:
原因补充:

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