Android Training - 创建自定义的Views(Lesson 4 - 优化Views)
来源:互联网 发布:淘宝哪家女生衣服好看 编辑:程序博客网 时间:2024/05/21 10:02
前面的课程学习到了如何创建设计良好的View,并且能够使之在手势与状态切换时得到正确的反馈。下面要介绍的是如何使得view能够执行更快。为了避免UI显得卡顿,你必须确保动画能够保持在60fps以上。
Do Less, Less Frequently
为了加速你的view,对于频繁调用的方法,需要尽量减少不必要的代码。先从onDraw开始,需要特别注意不应该在这里做内存分配的事情,因为它会导致GC,从而导致卡顿。在初始化或者动画间隙期间做分配内存的动作。不要在动画正在执行的时候做内存分配的事情。
你还需要尽可能的减少onDraw被调用的次数,大多数时候导致onDraw都是因为调用了invalidate().因此请尽量减少调用invaildate()的次数。如果可能的话,尽量调用含有4个参数的invalidate()方法而不是没有参数的invalidate()。没有参数的invalidate会强制重绘整个view。
另外一个非常耗时的操作是请求layout。任何时候执行requestLayout(),会使得Android UI系统去遍历整个View的层级来计算出每一个view的大小。如果找到有冲突的值,它会需要重新计算好几次。另外需要尽量保持View的层级是扁平化的,这样对提高效率很有帮助。
如果你有一个复杂的UI,你应该考虑写一个自定义的ViewGroup来执行他的layout操作。与内置的view不同,自定义的view可以使得程序仅仅测量这一部分,这避免了遍历整个view的层级结构来计算大小。
Use Hardware Acceleration
从Android 3.0开始,Android的2D图像系统可以通过GPU来加速。GPU硬件加速可以提高许多程序的性能。但是这并不是说它适合所有的程序。
参考Hardware Acceleration 来学习如何在程序中启用加速。
一旦你开启了硬件加速,性能的提示并不一定可以明显察觉到。移动GPU在某些例如scaling,rotating与translating的操作中表现良好。但是对其他一些任务则表现不佳。
在下面的例子中,绘制pie是相对来说比较费时的。解决方案是把pie放到一个子view中,并设置View使用LAYER_TYPE_HARDWARE来进行加速,。
通过这样的修改以后,PieChart.PieView.onDraw()只会在第一次现实的时候被调用。之后,pie chart会被缓存为一张图片,并通过GPU来进行重画不同的角度。
缓存图片到hardware layer会消耗video memory,而video memory又是有限的。基于这样的考虑,仅仅在用户触发scrolling的时候使用LAYER_TYPE_HARDWARE,在其他时候,使用LAYER_TYPE_NONE。
学习自:http://developer.android.com/training/custom-views/optimizing-view.html,请多指教,谢谢!
转载请注明出自http://kesenhoo.github.com,谢谢配合!
- Android Training - 创建自定义的Views(Lesson 4 - 优化Views)
- 【Android Training UI】创建自定义的Views(Lesson 4 - 优化View的性能)
- Android Training - 创建自定义的Views(Lesson 2 - 自定义Drawing)
- 【Android Training UI】创建自定义Views(Lesson 2 - 自定义Drawing)
- 【Android Training UI】创建自定义Views(Lesson 0 - 章节概览)
- Android Training - 创建自定义的Views(Lesson 1 - 创建一个View类)
- 【Android Training UI】创建自定义的Views(Lesson 3 - 处理View的交互性)
- Android Training - 创建自定义的Views(Lesson 3 - 处理View的交互性)
- 【Android Training UI】创建自定义Views(Lesson 1 - 创建一个View类)
- android views
- 【Android Training - UserInfo】记住登入用户的信息[Lesson 3 - 创建自定义的账户]
- 4 views
- Creating Custom Views//制作自定义的视图
- Django自定义用于Views的装饰器
- 【Android Training - Connectivity】优化下载的效率[Lesson 4 - 根据网络类型更改下载模式]
- 【Android Training - Graphics】高效地显示Bitmap图片(Lesson 4 - 优化Bitmap的内存使用)
- AndroidAnnotations——Enhance custom views 优化自定义组件
- AndroidAnnotations——Enhance custom views 优化自定义组件
- hdu 5481 离散化
- win7+ubuntu Kylin 15.10融合之路很简单...so easy
- Linux下shell脚本启动jar包
- 字符串的判断的StringUtil中isEmpty和isBlank用法
- Android Camera开发:扫描二维码,周期性循环自动聚焦auto focus挂掉原因分析(preview is not enabled)
- Android Training - 创建自定义的Views(Lesson 4 - 优化Views)
- 漫谈计算摄像学 (一):直观理解光场(Light Field)
- Java并发专题 带返回结果的批量任务执行 CompletionService
- 第一天:类和对象(^_^!)
- 对李博士随机网络网络演算学位论文的学习
- 七大经典算法之冒泡排序
- Junit4学习笔记
- 英雄联盟之策略很重要
- java 读取properties文件 ---封装组件