最近做项目发现一个界面当用到GridView的时候,getView和getCount中的log被疯狂调用,并且getVIew中的LOG每出来一次就是四条,并且这四条数据的position的值都是0。一个5个Item的GridView,getView竟然会被反复调用。尤其是当ItemView中需要加载图片时,很容易造成GC过多,很容易出现ANR。

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

更具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,这个过程会更加漫长。

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

原文地址:http://blog.sina.com.cn/s/blog_9996c67e01018249.html

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

  1. 【Unity3D】Android Studio 工程中使用 Java 代码调用 Unity 的 C# 脚本 ( Java 中调用 UnityPlayer#UnitySendMessage 方法 )

    文章目录 一. Java 调用 C# 依赖库准备 1.依赖库位置 2.unityLibrary 依赖库位置 二. Java 调用 C# 的 UnityPlayer#UnitySendMessage 方 ...

  2. python中int对象不可调用_'int'对象在python中不可调用

    我得到了这个,我期望它在打印x.withdraw()时能打印410. Kyle 12345 500 Traceback (most recent call last): File "bank ...

  3. python中执行linux命令(调用linux命令)_常见Python中调用Linux命令

    有时候我们需要从Python中执行Linux命令,下面就介绍几种方法? 1. os 模块: 1.1 os.system 函数: system方法会创建子进程运行外部程序,方法只返回外部程序的运行结果. ...

  4. python封装类在当前文件中使用_name_下调用不了_学python中对于类怎么也不明白,对了是看到简明教程11章,类与变量的对象....想要通俗易懂的答案....

    代码(简明python教程第11章,感觉看懂了大半但是其中我没调用的为什么也有...谢谢!!!):#coding:utf-8#数据结构好抽象啊..#python的空格制表位,是灾难的开始啊#init制 ...

  5. 转:在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档

    在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档 一直以来,我都想为 PDF 补丁丁添加一个 PDF 渲染引擎.可是,目前并没有可以在 .NET 框架上运行的免费 PDF ...

  6. 编写一个C程序,实现以下功能:编写一个函数decTobin(int n),该函数能将一个十进制数n转换成二进制数,输入13 输出 1101。在main函数中输入整数n,调用函数,输出它的二进制

    题目要求: 编写一个C程序,实现以下功能: //编写一个函数decTobin(int n),该函数能将一个十进制数n转换成二进制数,输入13 输出 1101. //在main函数中输入整数n,调用函数 ...

  7. [图解]在输入框和文本框中获取和设置光标位置,以及选中文本和获取选中文本值的方法 --- 详解,兼容所有浏览器。...

    为什么80%的码农都做不了架构师?>>>    写在前面 最近在segmentfault上看到它的日期输入控件,感觉挺有意思.好吧,动手写一个,加到自己的代码库里吧. 然后问题来了, ...

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

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

  9. Android ListView反复调用getView和getCount

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

最新文章

  1. c语言多线程mysql_多线程读写mysql数据库
  2. linux怎么修改sftp默认端口,如何在 Linux 系统中如何更改 SFTP 端口
  3. Coloring Dominoes
  4. Atitit 理解Monad attilax总结
  5. CentOS5安装Nginx1.4+PHP5.5 FastCGI
  6. android task详解,Android AsyncTask的使用详解
  7. layui表单加文件 php_layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例...
  8. 大道至简读后感(七八章)
  9. SignalR循序渐进(三)简易的集群通讯组件
  10. 编程成长日记——折半查找
  11. eclipse中jsp页面%@page import=javax.servlet.http.*%报错
  12. 用pe修复服务器系统,如何用PE修复系统
  13. 全网最全最细的PLSQL下载、安装、配置、使用指南、问题解答,相关问题已汇总
  14. 《硅谷钢铁侠的跨界传奇-埃隆马斯克传》阅读笔记
  15. 验证邮箱的正则表达式
  16. 大疆精灵4RTK连接千寻位置FindM Pro、FindCM
  17. TensorFlow 安装与环境配置
  18. 筑龙网下载的文件格式是php_建筑工程竣工验收资料填报指南(范本)
  19. 2020年软件测试基本知识精要【乐搏TestPRO】
  20. nico和niconiconi

热门文章

  1. 单片机控制蜂鸣器唱生日快乐歌曲 PROTEUS 和51单片机教程(附仿真文件+源代码)
  2. 实时数仓:咸鱼的实时数仓经验分享
  3. 日常工作中常用的几个git指令
  4. android百度地图自定义图层,百度地图开发之百度地图定位图层基本使用方法讲解...
  5. 又到520了,来画一朵抽搐的玫瑰花吧
  6. 电脑游戏业编年史之八──幻影的年代
  7. 如何在电脑上批量查询多个申通快递的物流信息并保存
  8. poj 滑雪(DFS)||(DP+递归)
  9. 广州人事管理系统哪家好?人事管理系统厂商推荐!
  10. Java实现快速排序(快排)