- 浏览: 174972 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (140)
- java (138)
- 佳能500d (1)
- 佳能 (1)
- Oracle数据库文档构造器--Oraschemadoc (1)
- EJB调用的原理分析 (1)
- 使用css3画"静音"icon (1)
- 张小庆,在路上(16)-给弟弟找工作 (1)
- Android短信编解码方式 (1)
- lua web 开发 (1)
- zk安装 (1)
- 菜单多国语言化遇到的问题 (1)
- 【转】纯文本配置还是注册表 (1)
- C++ delete删除动态分配的内存 (1)
- eclipse下修改项目名导致tomcat内发布名不一致的解决方法 (1)
- Lucene实现各种常见文档的全文检索 (1)
- 项目风险之人员流动风险 (1)
- 时空数据模型简介 (1)
- XSLT学习笔记 (1)
- 依然是计划 如果没有计划似乎就没有了动力 (1)
- How to Succeed in A Professional Career (1)
- 编程环境应该和讨论社区完美的进行结合 (1)
- C#坦克大战实现 (1)
- 电脑用户密码忘记了怎么办? (1)
- java.lang.NoClassDefFoundError: org/dom4j/DocumentException (1)
- 关于成立北京Android爱好者俱乐部的声明 (1)
- Android开发之初探音频的播放 (1)
- Struts标签循环List (1)
- CAP原理 (1)
- javabean的自动生成 (1)
- 打开CMD一闪就关的解决方案 (1)
- 我是项目经理,我的项目管理日记【20111202】 (1)
- Html5游戏开发入门笔记--<躲砖块> (1)
- mysql中查看和设置系统字符编码 (1)
- PhoneGap-Accelerometer (1)
- [Jetty]Jetty工作原理 (1)
- Ibatis+Spring整合实例Demo+源码 (1)
最新评论
-
u012985907:
dsdsdsdsd
FLASH上传与拍照 -头像-avatart -
a379933101:
?????????????????????????????
android listview 连续调用 getview问题分析及解决 -
151tmac:
拜托下次粘贴的时候,粘贴为纯文本
android listview 连续调用 getview问题分析及解决 -
liudezhong135:
...
Spring3MVC 在JSP中使用@ModelAttribute -
香飘飘2011:
要是不知道层次级别,如何退回到根目录呢
FTP退回到根目录
[size=medium;]android listview 连续调用 getview问题分析及解决[/size]
转载自:http://blog.csdn.net/f8376904110/article/details/6460934
[size=medium;] 当我们在使用listview的时候。有时候自定义adapter的时候,是不是会发现在getview里打印日志的时候,重复调用很多次?有时候4次。有的严重甚至到10次,当我们在listview中移动的时候。每移动一列都会调用很多次,这样大大影响到效率!其实这和listview本身在android上的机制有关。下面我开始来介绍一下吧:[/size]
[size=medium;]<br>[/size]
[size=medium;]</span>
[size=medium;] 在布局,我们只有一个listview的时候。那好。我们把高设置成wrap_content的时候。在listview里加载几行看看。日志在getview里打印一下。是不是重复调用了?那这个办法就好弄了。把高设置成fill_parent就成了。这个时候发现日志还是重复调用?那就要看一下listview的上一级而已的高是不是也是设置也fill_parent的,如果不是。请改动吧。如果是。。。那我还真没碰到重复调用的!因为测试好几次了![/size]
[size=medium;]<br>[/size]
[size=medium;][/size]
[size=medium;] 如果我们在而已里不只一个listview。一个复杂好看的布局可能有很多。listview在布局的某个地方。这个时候有时候运气不好。你会发现你调用了很多次getview。我测试的时候。最高230次。。。可想而知。这个速度是相当慢。而且每移动一次就是调用这么多次!对于这样的情况,在修改布局的时候,要考虑以下两点:1.首先考虑需求布局和性能哪个更重要一点。2.考虑listview周边哪个布局控件影响到了它![/size]
[size=medium;]<br>[/size]
[size=medium;][/size]
[size=medium;] 如果在性能上没有太大影响,而需求要求必需是那样的布局。那就以布局为主。看看有没有别的方法来优化一下listview,当然前提是布局一点都不能调整。如果能调整,布局没有太大变动。而listview又能很好的优化。那就当然优化了!当我们优化的时候。首先要看一下有没有影响到listview重绘的控件,比如。如果它上面和下面都有控件。而且高都是wrap_content,那么你就要设置成fill_parent或者固定高。这样listview在高上就不会重绘,这是最主要的一点。那左右是不是也有控件(一般一个手机页面用到list的时候不会有这么多控件)?有,那我们就也要调整,那就同高一样的设置。一定要让listview是一个固定在那个地方不动的。不然,你就等着让他重复去调用吧![/size]
[size=medium;]<br>[/size]
[size=medium;][/size]
[size=medium;] 其实说了这么多。最主要的还是在我们进行布局的时候。要巧妙的运用每个控件的属性,以及了解控件每个的原理。这样在我们进行ui设计的时候,才能很好的去结合![/size]
<span style="color: #008000; font-size: large;"><br>[/size]
<span style="color: #008000; font-size: large;">关于adapter的getview方法中创建view的原理</span>
[size=small;]position的确是要显示的view在你的adapter里面的位置<br>你自己心里有一种先入为主的东西,扰乱了你的思维。<br>当你在滚动屏幕的时候,并不是说你只滚了一行,就只会有一次调用getview,实际上可能出现多次调用getview的(系统完全有可能多生成几行view,以便在摸动的时候,达到平滑不滞后的效果)。<br>在getview里面,你只能创建view,不可有自己的与界面无关的逻辑,因为你不知道getview什么时候被调用,以什么参数被调用。<br><br>而你要创建view,position参数是必须要使用的,所以不要怀疑这个参数。[/size][size=small;]<br>另外,position绝对不是屏幕上的位置,而是数据在adapter里面的位置,因为你创建view的时候,与它在屏幕上的位置没有关系,你只是创建,至于显示到哪里,你并没有做控制。<br>这个 先要理解了他的工作原理 才好分析原因。[/size]
[size=small;]<br>如果你的屏幕只能显示6行,所以position 的值就是0~5。<br>比如滚屏造成有一行出了屏,有一行新的入了屏<br>这个时候 新得到的view的 position 就会又充0计算<br>比如有2行进入的屏幕 那么position 就是0~1了<br>所以打印就是 先打印0~5 然后你拖地打印0~1<br>总之,position绝对是一个合法的值,但你不要想当然的认为,某次getview,一定会传一个position等于多少值的给你,不一定。因为getview是回调用的,什么时候创建是由系统决定的(它很可能会提早创建,原因前面我说过了)。<br><br>[/size][size=small;]<br>比如滚屏造成有一行出了屏,有一行新的入了屏,那么,系统会将出了屏的view做为参数(注意getview的第二个参数)调用getview,期望你将出屏的view改造成入屏的view(这只需要更新一下界面显示即可,不需要再new view,这就是我在前面某一贴里面跟你说的了——优化),如果每次都new,是很不负责的。<br>当然,上面只优化策略的一种,不排除还有其它策略,这要看google怎么设计的了。<br>比如滚屏造成有一行出了屏,有一行新的入了屏<br>这个时候 新得到的view的 position 就会又充0计算<br>比如有2行进入的屏幕 那么position 就是0~1了<br>所以打印就是 先打印0~5 然后你拖地打印0~1[/size]
转载自:http://blog.csdn.net/f8376904110/article/details/6460934
[size=medium;] 当我们在使用listview的时候。有时候自定义adapter的时候,是不是会发现在getview里打印日志的时候,重复调用很多次?有时候4次。有的严重甚至到10次,当我们在listview中移动的时候。每移动一列都会调用很多次,这样大大影响到效率!其实这和listview本身在android上的机制有关。下面我开始来介绍一下吧:[/size]
[size=medium;]<br>[/size]
[size=medium;]</span>
[size=medium;] 在布局,我们只有一个listview的时候。那好。我们把高设置成wrap_content的时候。在listview里加载几行看看。日志在getview里打印一下。是不是重复调用了?那这个办法就好弄了。把高设置成fill_parent就成了。这个时候发现日志还是重复调用?那就要看一下listview的上一级而已的高是不是也是设置也fill_parent的,如果不是。请改动吧。如果是。。。那我还真没碰到重复调用的!因为测试好几次了![/size]
[size=medium;]<br>[/size]
[size=medium;][/size]
[size=medium;] 如果我们在而已里不只一个listview。一个复杂好看的布局可能有很多。listview在布局的某个地方。这个时候有时候运气不好。你会发现你调用了很多次getview。我测试的时候。最高230次。。。可想而知。这个速度是相当慢。而且每移动一次就是调用这么多次!对于这样的情况,在修改布局的时候,要考虑以下两点:1.首先考虑需求布局和性能哪个更重要一点。2.考虑listview周边哪个布局控件影响到了它![/size]
[size=medium;]<br>[/size]
[size=medium;][/size]
[size=medium;] 如果在性能上没有太大影响,而需求要求必需是那样的布局。那就以布局为主。看看有没有别的方法来优化一下listview,当然前提是布局一点都不能调整。如果能调整,布局没有太大变动。而listview又能很好的优化。那就当然优化了!当我们优化的时候。首先要看一下有没有影响到listview重绘的控件,比如。如果它上面和下面都有控件。而且高都是wrap_content,那么你就要设置成fill_parent或者固定高。这样listview在高上就不会重绘,这是最主要的一点。那左右是不是也有控件(一般一个手机页面用到list的时候不会有这么多控件)?有,那我们就也要调整,那就同高一样的设置。一定要让listview是一个固定在那个地方不动的。不然,你就等着让他重复去调用吧![/size]
[size=medium;]<br>[/size]
[size=medium;][/size]
[size=medium;] 其实说了这么多。最主要的还是在我们进行布局的时候。要巧妙的运用每个控件的属性,以及了解控件每个的原理。这样在我们进行ui设计的时候,才能很好的去结合![/size]
<span style="color: #008000; font-size: large;"><br>[/size]
<span style="color: #008000; font-size: large;">关于adapter的getview方法中创建view的原理</span>
[size=small;]position的确是要显示的view在你的adapter里面的位置<br>你自己心里有一种先入为主的东西,扰乱了你的思维。<br>当你在滚动屏幕的时候,并不是说你只滚了一行,就只会有一次调用getview,实际上可能出现多次调用getview的(系统完全有可能多生成几行view,以便在摸动的时候,达到平滑不滞后的效果)。<br>在getview里面,你只能创建view,不可有自己的与界面无关的逻辑,因为你不知道getview什么时候被调用,以什么参数被调用。<br><br>而你要创建view,position参数是必须要使用的,所以不要怀疑这个参数。[/size][size=small;]<br>另外,position绝对不是屏幕上的位置,而是数据在adapter里面的位置,因为你创建view的时候,与它在屏幕上的位置没有关系,你只是创建,至于显示到哪里,你并没有做控制。<br>这个 先要理解了他的工作原理 才好分析原因。[/size]
[size=small;]<br>如果你的屏幕只能显示6行,所以position 的值就是0~5。<br>比如滚屏造成有一行出了屏,有一行新的入了屏<br>这个时候 新得到的view的 position 就会又充0计算<br>比如有2行进入的屏幕 那么position 就是0~1了<br>所以打印就是 先打印0~5 然后你拖地打印0~1<br>总之,position绝对是一个合法的值,但你不要想当然的认为,某次getview,一定会传一个position等于多少值的给你,不一定。因为getview是回调用的,什么时候创建是由系统决定的(它很可能会提早创建,原因前面我说过了)。<br><br>[/size][size=small;]<br>比如滚屏造成有一行出了屏,有一行新的入了屏,那么,系统会将出了屏的view做为参数(注意getview的第二个参数)调用getview,期望你将出屏的view改造成入屏的view(这只需要更新一下界面显示即可,不需要再new view,这就是我在前面某一贴里面跟你说的了——优化),如果每次都new,是很不负责的。<br>当然,上面只优化策略的一种,不排除还有其它策略,这要看google怎么设计的了。<br>比如滚屏造成有一行出了屏,有一行新的入了屏<br>这个时候 新得到的view的 position 就会又充0计算<br>比如有2行进入的屏幕 那么position 就是0~1了<br>所以打印就是 先打印0~5 然后你拖地打印0~1[/size]
发表评论
-
Ibatis+Spring整合实例Demo+源码
2012-02-08 12:58 1391<span style="color: ... -
[Jetty]Jetty工作原理
2012-02-07 17:29 988http://www.ibm.com/develo ... -
PhoneGap-Accelerometer
2012-02-07 14:23 1195采集设备在x、y、z方向上的动作。 acce ... -
mysql中查看和设置系统字符编码
2012-02-04 14:28 1701--查看数据库的字符集 show variables ... -
Html5游戏开发入门笔记--<躲砖块>
2012-02-03 12:04 1162学习了html5中的canvas画布元素,自己写了一个 ... -
我是项目经理,我的项目管理日记【20111202】
2012-02-03 10:19 985其实前段时间项目 ... -
打开CMD一闪就关的解决方案
2012-02-02 12:14 1378转:http://blog.163.com/cumt_ ... -
javabean的自动生成
2012-02-02 11:59 1386在jcreator pro中自动生成 在j ... -
CAP原理
2012-02-01 09:00 1141作者:NinGoo 原文链接:ht ... -
Struts标签循环List
2012-01-31 14:18 957<pre name="code&quo ... -
Android开发之初探音频的播放
2012-01-11 16:29 1078<h1>Android开发之初探音频的播放 ... -
关于成立北京Android爱好者俱乐部的声明
2012-01-11 14:33 857<blockquote dir="lt ... -
java.lang.NoClassDefFoundError: org/dom4j/DocumentException
2011-12-28 13:03 15082<span style="font-f ... -
电脑用户密码忘记了怎么办?
2011-12-28 12:14 973<span style="fon ... -
C#坦克大战实现
2011-12-20 13:29 1107记得在大学学java ... -
编程环境应该和讨论社区完美的进行结合
2011-12-19 11:54 754在学习.NET过程中,经常会遇到很多问题,有的时候会找 ... -
How to Succeed in A Professional Career
2011-12-19 10:29 724(From Microsoft)<br>& ... -
依然是计划 如果没有计划似乎就没有了动力
2011-12-15 10:39 871</span></span>& ... -
XSLT学习笔记
2011-12-14 14:04 657<p class="MsoNorma ... -
时空数据模型简介
2011-12-14 13:59 1474<p class="MsoNo ...
相关推荐
android listview getview多调用俩周期
主要介绍了Android ListView与getView调用卡顿问题解决办法的相关资料,这里提供实例及解决办法帮助大家解决这种问题,需要的朋友可以参考下
ListView中getView重用好多次,有头像的布局
Android ListView 下拉刷新 解决不停调用getview导致界面卡的问题
以前倒是没有注意listview的getView会重复执行多次,在测试的时候去断点跟踪,发现同一条数据不断的重复执行,下面与大家分享下正确的解决方法,希望对你有所帮助
当每条数据进入可见区域时,adapter的getview()会被调用,返回代表具体数据的视图。触摸滚动时,频繁调用。支持成百上千条数据。 下面为显示每条数据的xml文件: <LinearLayout nxmlns:android=...
本文讲实现一个自定义列表的Android程序,程序将...ListView在开始绘制的时候,系统自动调用getCount()函数,根据函数返回值得到ListView的长度, 然后根据这个长度,调用getView()逐一画出每一行。 具体使用方法可以
android_ListView优化Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。想过没有? 在我们的列表有1000000项时会是什么样的?是不是会...
ListView和GridView多次调用getView的bug,导致赋值错位 最近总遇到写GridView适配器赋值时,最后一两个需定义其他图片时,赋图错误,原因就是适配器的getView多次调用,导致数据赋值错误,上网搜索终于找到解决...
Android ListView的优化,在做Android项目的时候,在用到ListView 界面及数据显示,这个时候如果资源过大,对项目来说,用户体验肯定是不好的,这里就对如何优化做了详细介绍: Adapter的作用就是ListView界面与数据...
对于android中的ListView刷新机制,大多数的程序员都是很熟悉的,修改或者添加adapter中的数据源之后,然后调用notifyDataSetChanged()刷新ListView。在这种模式下,我们会在getView中,根据不同的数据源,让控件...
我找了一下原因,可能是在listview快速滑动屏幕的时候划过的item太多 而且每次调用getView方法后就会异步的在过去某个时间内用handler刷新一下UI, 如果在同一时间调用handler刷新UI次数多了就会造成这样的卡屏现象...
方法虽然简单,但这里面涉及到一个效率的问题,调用notifydatasetchange其实会导致adpter的getView方法被多次调用 (画面上能显示多少就会被调用多少次),如果是很明确的知道只更新了list中的某一个项的数据(比如...
发现,由于复用等原因,如果直接在子控件的onClick事件中调用getView()中的position,会出现数据或显示错位的问 题,原因就是position的值出现了重复或不准确,解决这个问题的方法是,在adapter每次加载数据的时候,...
在了解ViewPager的工作原理之前,先回顾ListView的工作原理: ListView只有在需要显示某些列表项时,它才会去申请可用的视图对象;如果为所有的列表项数据创建...紧接着ListView就调用adapter的getView(int, View, Vi
为什么MyAdapater的getView没有被调用 XmlSerializer使用总结: ListView中的Item自定义点击后的背景色的方法。 drawable各个分辨率 fragment 的几种创建方式 fragment第一次使用遇到的问题 activity变身对话框 ...
ListView调用Adapter的getView方法获取每一个Item布局,将这些已经获得的Item布局放入缓存,将大大提高获取数据的效率,而且节省更多的流量,将数据进行缓存有两种方法是,一种是将内存缓存一种是sd卡缓存,在此分别...