Android官方开发文档Training系列课程中文版:创建自定义View之View的优化
原文地址:http://android.xsoftlab.net/training/custom-views/optimizing-view.html
现在已经完成了一个拥有良好设计的View,它即可以响应手势,又可以在状态之间过渡。为了避免View有卡顿的感觉,需要确保动画始终是按照每秒60帧的频率执行的。
尽可能的降低频率
为了使View更加流畅,需要从频繁调用的方法中剔除不必要的代码。
首先从onDraw()方法开始,在该方法中动刀会有明显的流畅感。尤其是应该移除onDraw()方法中的内存分配代码,因为内存分配会导致垃圾回收,这可能会使程序暂停。应该在程序初始化时或在动画开始执行之前申请内存,绝不要在动画运行的过程中申请内存。
除了精简onDraw()方法之外,还应该确保降低这些方法的调用频率。onDraw()方法的大部分调用是由invalidate()方法引起的,所以要移除不必要的invalidate()执行代码。
另一项代价非常高昂的操作就是布局的测量。每次调用requestLayout()时,Android的UI系统都会测量整个View层级来确定每个View都需要多大尺寸。如果找到尺寸有冲突的,还需要进行多次测量。UI设计者有时候需要创建内嵌ViewGroup的深层级布局来使UI布局正确。这些深层级的布局层级会引起性能问题。要使View层级尽可能的潜。
如果你有一个稍微复杂一点的UI,考虑写一个自定义ViewGroup来执行这样的布局。与内置的View不同,你的自定义View可以对它的子View的尺寸与形状作个假设,这样就可以不用去测量子View的尺寸了。饼图示例展示了如何将ViewGroup作为自定义View的一部分。饼图含有一些子View,但是绝对不会去测量它们。相反的,它通过独有的自定义布局算法直接为这些View设置了尺寸。
Android官方开发文档Training系列课程中文版:创建自定义View之View的优化相关推荐
- Android官方开发文档Training系列课程中文版:后台服务之IntentService的创建
原文地址:http://android.xsoftlab.net/training/run-background-service/index.html 引言 除非特别指定,否则所有的操作都是在UI线程 ...
- Android官方开发文档Training系列课程中文版:目录
原文地址 : http://android.xsoftlab.net/training/index.html 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻 ...
- Android官方开发文档Training系列课程中文版:创建自定义View之View的创建
原文地址:http://android.xsoftlab.net/training/custom-views/index.html 引言 Android框架含有大量的View类,这些类用来显示各式各样 ...
- Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制
原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...
- Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建
原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要 ...
- Android官方开发文档Training系列课程中文版:打印内容之HTML文档打印
原文地址:http://android.xsoftlab.net/training/printing/html-docs.html 在Android中打印内容要比打印照片要复杂一些,它要求将文本与图像 ...
- Android官方开发文档Training系列课程中文版:动画视图之转场框架介绍
原文地址:http://android.xsoftlab.net/training/transitions/index.html 引言 Activity所呈现的UI经常会由用户的输入或者其它事件而发生 ...
- Android官方开发文档Training系列课程中文版:调用相机之控制相机
原文地址:http://android.xsoftlab.net/training/camera/cameradirect.html 在这节课,我们会讨论如何使用Android框架API来直接控制相机 ...
- Android官方开发文档Training系列课程中文版:Android的安全建议
原文地址:http://android.xsoftlab.net/training/articles/security-tips.html Android系统内置的安全策略可以有效的降低应用程序的安全 ...
- Android官方开发文档Training系列课程中文版:后台加载数据之使用CursorLoader进行查询
原文地址:http://android.xsoftlab.net/training/load-data-background/index.html 引言 在ContentProvider中查询数据是需 ...
最新文章
- kubernetes apiserver认证
- 软件架构的相关概念小汇
- PowerShell CLI 获取VM信息
- 【干货】深入B端SaaS产品设计核心理念
- leetcode 刷题142 143
- 米度教育零基础三个月学会机器学习视频总结
- 2021年10月Python小屋编程比赛获奖名单
- 计算机网络class 3(速率的相关性能指标)
- Cors 跨域 共享
- Hive建表语句批量导出导入
- 开启nexus出现If you insist running as root, then set the environment variable RUN_AS_USER=root
- 为 Form Library 开发工作流,如何读取 InfoPath 表单内容
- 数据、数据库、数据库管理系统、数据库系统
- 754. 到达终点数字
- ffmpeg剪辑视频
- 基于STM32编译程序,串口实现Hello windows!
- Mybatis执行批量插入返回数据库主键列表
- Hash中的base与moder的建议
- 用机器学习实现《GB/T 13234 用能单位节能量计算方法》
- mysql select lock in share mode_深入理解SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE
热门文章
- 用Android UEventObserver监听内核event
- uniapp封装网络请求_八张图带你走进“通过一个完美请求封装一个网络模块”
- python复制sheet_python excel sheet复制
- jsp项目开发案例_Laravel 中使用 swoole 项目实战开发案例一 (建立 swoole 和前端通信)life...
- c语言指针改良,重新认识C语言指针(上)(示例代码)
- TensorFlow 2.0 - Hub 模型复用
- LeetCode 1737. 满足三条件之一需改变的最少字符数(计数)
- LeetCode 1568. 使陆地分离的最少天数(DFS)
- LeetCode 旋转数组 系列
- 程序员面试金典 - 面试题 05.03. 翻转数位(位运算)