原文地址: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的优化相关推荐

  1. Android官方开发文档Training系列课程中文版:后台服务之IntentService的创建

    原文地址:http://android.xsoftlab.net/training/run-background-service/index.html 引言 除非特别指定,否则所有的操作都是在UI线程 ...

  2. Android官方开发文档Training系列课程中文版:目录

    原文地址 : http://android.xsoftlab.net/training/index.html 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻 ...

  3. Android官方开发文档Training系列课程中文版:创建自定义View之View的创建

    原文地址:http://android.xsoftlab.net/training/custom-views/index.html 引言 Android框架含有大量的View类,这些类用来显示各式各样 ...

  4. Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...

  5. Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建

    原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要 ...

  6. Android官方开发文档Training系列课程中文版:打印内容之HTML文档打印

    原文地址:http://android.xsoftlab.net/training/printing/html-docs.html 在Android中打印内容要比打印照片要复杂一些,它要求将文本与图像 ...

  7. Android官方开发文档Training系列课程中文版:动画视图之转场框架介绍

    原文地址:http://android.xsoftlab.net/training/transitions/index.html 引言 Activity所呈现的UI经常会由用户的输入或者其它事件而发生 ...

  8. Android官方开发文档Training系列课程中文版:调用相机之控制相机

    原文地址:http://android.xsoftlab.net/training/camera/cameradirect.html 在这节课,我们会讨论如何使用Android框架API来直接控制相机 ...

  9. Android官方开发文档Training系列课程中文版:Android的安全建议

    原文地址:http://android.xsoftlab.net/training/articles/security-tips.html Android系统内置的安全策略可以有效的降低应用程序的安全 ...

  10. Android官方开发文档Training系列课程中文版:后台加载数据之使用CursorLoader进行查询

    原文地址:http://android.xsoftlab.net/training/load-data-background/index.html 引言 在ContentProvider中查询数据是需 ...

最新文章

  1. kubernetes apiserver认证
  2. 软件架构的相关概念小汇
  3. PowerShell CLI 获取VM信息
  4. 【干货】深入B端SaaS产品设计核心理念
  5. leetcode 刷题142 143
  6. 米度教育零基础三个月学会机器学习视频总结
  7. 2021年10月Python小屋编程比赛获奖名单
  8. 计算机网络class 3(速率的相关性能指标)
  9. Cors 跨域 共享
  10. Hive建表语句批量导出导入
  11. 开启nexus出现If you insist running as root, then set the environment variable RUN_AS_USER=root
  12. 为 Form Library 开发工作流,如何读取 InfoPath 表单内容
  13. 数据、数据库、数据库管理系统、数据库系统
  14. 754. 到达终点数字
  15. ffmpeg剪辑视频
  16. 基于STM32编译程序,串口实现Hello windows!
  17. Mybatis执行批量插入返回数据库主键列表
  18. Hash中的base与moder的建议
  19. 用机器学习实现《GB/T 13234 用能单位节能量计算方法》
  20. mysql select lock in share mode_深入理解SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE

热门文章

  1. 用Android UEventObserver监听内核event
  2. uniapp封装网络请求_八张图带你走进“通过一个完美请求封装一个网络模块”
  3. python复制sheet_python excel sheet复制
  4. jsp项目开发案例_Laravel 中使用 swoole 项目实战开发案例一 (建立 swoole 和前端通信)life...
  5. c语言指针改良,重新认识C语言指针(上)(示例代码)
  6. TensorFlow 2.0 - Hub 模型复用
  7. LeetCode 1737. 满足三条件之一需改变的最少字符数(计数)
  8. LeetCode 1568. 使陆地分离的最少天数(DFS)
  9. LeetCode 旋转数组 系列
  10. 程序员面试金典 - 面试题 05.03. 翻转数位(位运算)