ListView 优化注意的问题
2015-12-05 18:46
239 查看
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:吴晶
链接:http://www.zhihu.com/question/19703384/answer/56758275
来源:知乎
我这里说一下我用 ListView 的一些经验,为了尽量说的全面一些,这里列一些 Tips,具体的代码可以找相关的文章,或者一起交流: 首先,虽然大家都知道,还是提一下,利用好 convertView 来重用 View,切忌每次 getView() 都新建。ListView 的核心原理就是重用 View。ListView 中有一个回收器,Item 滑出界面的时候 View 会回收到这里,需要显示新的 Item 的时候,就尽量重用回收器里面的 View。利用好 View Type,例如你的 ListView 中有几个类型的 Item,需要给每个类型创建不同的 View,这样有利于 ListView 的回收,当然类型不能太多;尽量让 ItemView 的 Layout 层次结构简单,这是所有 Layout 都必须遵循的; 善用自定义 View,自定义 View 可以有效的减小 Layout 的层级,而且对绘制过程可以很好的控制;尽量能保证 Adapter 的 hasStableIds() 返回 true,这样在 notifyDataSetChanged() 的时候,如果 id 不变,ListView 将不会重新绘制这个 View,达到优化的目的;每个 Item 不能太高,特别是不要超过屏幕的高度,可以参考 Facebook 的优化方法,把特别复杂的 Item 分解成若干小的 Item,特别推荐看一下这个文章:https://code.facebook.com/posts/879498888759525/fast-rendering-news-feed-on-android/为了保证 ListView 滑动的流畅性,getView() 中要做尽量少的事情,不要有耗时的操作。特别是滑动的时候不要加载图片,停下来再加载,这个库可以帮助你 Glide:https://github.com/bumptech/glide使用 RecycleView 代替。 ListView 每次更新数据都要 notifyDataSetChanged(),有些太暴力了。RecycleView 在性能和可定制性上都有很大的改善,推荐使用。有时候,需要从根本上考虑,是否真的要使用 ListView 来实现你的需求,或者是否有其他选择?写的有点散,有些也是相互穿插的。这里面提到的都是一些原则,详细的解决方案,每个都能在网上找到相关的文章。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:吴晶
链接:http://www.zhihu.com/question/19703384/answer/56758275
来源:知乎
我这里说一下我用 ListView 的一些经验,为了尽量说的全面一些,这里列一些 Tips,具体的代码可以找相关的文章,或者一起交流: 首先,虽然大家都知道,还是提一下,利用好 convertView 来重用 View,切忌每次 getView() 都新建。ListView 的核心原理就是重用 View。ListView 中有一个回收器,Item 滑出界面的时候 View 会回收到这里,需要显示新的 Item 的时候,就尽量重用回收器里面的 View。利用好 View Type,例如你的 ListView 中有几个类型的 Item,需要给每个类型创建不同的 View,这样有利于 ListView 的回收,当然类型不能太多;尽量让 ItemView 的 Layout 层次结构简单,这是所有 Layout 都必须遵循的; 善用自定义 View,自定义 View 可以有效的减小 Layout 的层级,而且对绘制过程可以很好的控制;尽量能保证 Adapter 的 hasStableIds() 返回 true,这样在 notifyDataSetChanged() 的时候,如果 id 不变,ListView 将不会重新绘制这个 View,达到优化的目的;每个 Item 不能太高,特别是不要超过屏幕的高度,可以参考 Facebook 的优化方法,把特别复杂的 Item 分解成若干小的 Item,特别推荐看一下这个文章:https://code.facebook.com/posts/879498888759525/fast-rendering-news-feed-on-android/为了保证 ListView 滑动的流畅性,getView() 中要做尽量少的事情,不要有耗时的操作。特别是滑动的时候不要加载图片,停下来再加载,这个库可以帮助你 Glide:https://github.com/bumptech/glide使用 RecycleView 代替。 ListView 每次更新数据都要 notifyDataSetChanged(),有些太暴力了。RecycleView 在性能和可定制性上都有很大的改善,推荐使用。有时候,需要从根本上考虑,是否真的要使用 ListView 来实现你的需求,或者是否有其他选择?写的有点散,有些也是相互穿插的。这里面提到的都是一些原则,详细的解决方案,每个都能在网上找到相关的文章。
相关文章推荐
- Climbing Stairs-python
- mysql主从复制原理及存在的问题
- 人人都能开发物联网(二.技术路线)
- 按钮实现刚点击就切换状态(即UIControlEventTouchDown)
- HDU1226 搜索 bfs xingxing在努力
- http://airos.blog.51cto.com/10853324/1719870
- Configuring Oracle Solaris Cluster 4.0 On Solaris 11
- nginx 配置文件中的 location
- CSS3之文字与字体相关样式
- 实用案例,先收着,以后可能会用到
- 函数指针 成员函数指针
- UVA 11983 Weird Advertisement
- [Java 基础] 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
- 国内NTP服务器整理
- 2015校赛A
- eclipse中删除所有的空行
- C++ STL基本容器比较
- 深入浅出java虚拟机系列:(一)jvm 内存区域
- Android中获取屏幕信息DisplayMetrics的用法
- hihoCoder: Individual Income Tax