- 浏览: 283225 次
- 性别:
- 来自: 济南
文章分类
最新评论
本文原创, 转载请注明出处 : http://blog.csdn.net/qinjuning
前言,竟然是翻译,当然得弄的有板有眼。 照着大作家格式来咯 , - - 。
译序
最近一直在做锁屏界面,之前也写过关于锁屏界面的一些简单原理,未曾想自己真正去深入理解锁屏时,才
发觉锁屏框架 真是又大又复杂,主要体现在如下两个方面:
1、界面的组成以及更新机制;
2、对电源管理的控制,在锁屏界面会禁用系统的电源管理,自己接管屏幕亮度的控制。
当然还有更多的逻辑细节处理,只能耐着性子去研究了。。
通过对本次锁屏界面的处理,才发现自己对View绘制还是不熟透,很多东西也没有去潜心研究,导致自己在
真正做 项目时候才手忙脚乱的。因此,借着这次机会,也把 Android 4.0 developer 这些先进的知识(山人一直
沉浸在Android 2.2中) 给过了一下,真是妙处多多。
开头: 为了避免歧义,先将Android “Layout”一次的意思进行说明,主要有如下三个方面:
1、统称,即如何摆放UI,UI呈现效果等;
2、布局文件 ,即/res/layout/xxx.xml ;
3、布局过程 ,Android绘制过程中的 layout过程;
4、一些布局控件,例如LinearLayout、FrameLayout等 ;
正文:
改善布局效率(Layout Performace)
本文翻译地址:http://developer.android.com/training/improving-layouts/index.html
布局是Android应用程序重要的一部分,它与用户体验有着直接联系。如果一个布局是糟糕的,它将产生一个
消耗内存 与低效UI应用程序。 Android SDK 及它包含的工具都能帮助你定位在布局过程中隐藏的问题,通过对
这些课程的学习, 你能够以很小的内存代价去实现流畅的平滑界面。
课程如下:
1、优化布局层次
同样地,一个复杂的网页会延长加载时间,你的布局层次如果太复杂也能引发一些效率问题。本课程
告知你如何利用 SDK的工具去观察你的布局以及发现布局过程的瓶颈问题。
2、使用<include />标签复用布局文件
如果应用程序的UI在多处重复某些布局结构,本课程向你展示如何创建高效、可重用的布局结构, 然后
以合适的 UI布局文件包含它们。
3、按需加载View视图
除了简单地在另外的布局文件中包括一个布局组件,你可能想在需要的时候才将视图显现出来,有的时候
是在 Activity运行之后。本课程告诉你如何改进布局初始化行为---- 按需加载布局文件的某个视图。
4、如何使ListView流畅滑动
如果你构建了一个ListView实例呈现那些包含复杂或者大容量数据的列表项,这可能会影响ListView的流畅
滑动。 本课程提供了一些如何让滑动过程更加流畅的建议。
译一 :
优化布局层次
本文地址:http://developer.android.com/training/improving-layouts/optimizing-layout.html
一个通常的错误观念就是使用基本的布局结构(例如:LinearLayout、FrameLayout等)能够在大多数情况下
产生 高效率 的布局。显然,你的应用程序里添加的每一个控件和每一个布局都需要初始化、布局(layout)、
绘制 (drawing)。举例来说: 嵌入一个LinearLayout会产生一个太深的布局层次。更严重的是,嵌入几个使
用layout_weight属性的LinearLayout 将会导致大量的开销,因为每个子视图都需要被测量两次。这是反复解析
布局文件时重要的一点,例如在ListView或者 GridView中使用时。
观察你的布局
A ndroid SDK 工具箱包括一个称作“Hierarchy Viewer ”的工具,它允许你去在你的应用程序运行时分析
布局。 通过使用这个工具,能帮助你发现你的布局效率上的瓶颈问题。
“Hierarchy Viewer ”工具允许你在已连接的设备或模拟器中选择正在运行的进程,然后呈现出布局层次树
(layout tree)。 每个正方块下的交通灯(见下图) --- 红绿蓝表现出了在测量(measure)、布局(layout)、以及绘制
(draw)过程中的效率值,这能 帮助你定位潜在的问题。
假设ListView 中的一项Item 存在如下(见图 1)布局 :
图1 :ListView某项Item的布局效果图
“Hierarchy Viewer ” 工具可以在 <sdk>/tools路径下找到。当打开它时,“Hierarchy Viewer ”工具显示了
所有可用的 设备以及运行在这些设备上的进程。点击”Load View Hierarchy”来显示某个你选择的组件的UI布局
层次。举例来说,图2 展现了图1的布局层次树。
图2:使用LinearLayout的布局树
在图2中,你可以直观看到这个三层的布局结构是存在一些问题的。点击项体现出了在每个测量(measure)、
布局(layout)、 以及绘制(draw)过程中的时间消耗(见图3)。很明显,该项(LinearLayout)花费了最长的时间去
测量、布局、绘制,你应该 花点精力去优化它们。
图3: 某个LinearLayout的绘制时间
完成该布局文件渲染的时间分别为:
测量过程:0.977ms
布局过程:0.167ms
绘制过程:2.717ms
修改布局文件
由于上图中布局效率的低下是因为一个内嵌的LinearLayout控件,通过扁平化布局文件 ----让布局变得
更浅更宽, 而不是变得更窄更深层次 ,这样就能提升效率了。 一个RelativeLayout作为根节点也能提供如上
的布局效果(即图1)。 因此, 使用RelativeLayout改变布局的设计,你可以看到现在我们的布局层次只有2层了。
新的布局层次树如下:
图4:使用RelativeLayout的布局树
现在,完成该布局文件渲染的时间分别为:
测量过程:0.977ms
布局过程:0.167ms
绘制过程:2.717ms
也许它只是一点点微小的改进,但这次它会被多次调用,因为是ListView会布局所有的Item,累积起来,
改进后效果 还是非常可观地。
大部分的时间差异是由于使用了带有layout_weight属性的LinearLayout,它能减缓测量过程的速度。这仅仅
是一个例子, 即每个布局都应该合适地被使用以及你应该认真考虑是否有必要采用“layout_weight" 属性。
使用Lint工具 ( 译者注:ADT插件更新到最新的16.0后 的工具 )
关于Lint的使用更多请看:《Android Lint(官方代码优化利器) 》
一个好的实践就是在你的布局文件中使用Lint工具去寻求可能优化布局层次的方法。Lint已经取代了Layoutopt
工具并且它提供了更强大的功能。一些Lint规则 如下:
1、使用组合控件 --- 包含了一个ImageView以及一个TextView控件的LinearLayout如果能够作为一个
组合控件将会 被更有效的处理。
2、合并作为根节点的帧布局(Framelayout) ---- 如果一个帧布局时布局文件中的根节点,而且它没有背景图片
或者padding 等,更有效的方式是使用<merge />标签替换该< Framelayout />标签 。
关于这点,更多请看 :<<android merge之布局>>
<<Android里merge和include标签的使用>>
3、无用的叶子节点----- 通常来说如果一个布局控件没有子视图或者背景图片,那么该布局控件时可以被移除
(由于它处于 invisible状态)。
4、无用的父节点 ----- 如果一个父视图即有子视图,但没有兄弟视图节点,该视图不是ScrollView控件或者
根节点,并且它 没有背景图片,也是可以被移除的,移除之后,该父视图的所有子视图都直接迁移至之前父视图
的布局层次。同样能够使 解析布局以及布局层次更有效。
5、过深的布局层次 ---- 内嵌过多的布局总是低效率地。考虑使用一些扁平的布局控件,例如 RelativeLayout、
GridLayout,来改善布局过程。默认最大的布局深度为10 。
当使用Eclipse环境开发时,Lint能够自动解决一些问题,提供一些建议以及直接跳转到出错的代码中去核查。
如果你没有 使用Eclipse,Lint也可以通过命令行的方式运行。更多关于Lint的可用信息请参看:《 Android Lint 》
Hi ~~~
发表评论
-
unity基础开发----物体位移和旋转实用代码
2013-11-21 22:46 1272using UnityEngine; using Syst ... -
android 动态时钟 附源码
2013-09-24 12:03 1323自定义View实践 例子代码 自定义动态时钟 ... -
android Dialog 背景问题
2013-08-14 11:22 1209我们在使用自定义的Dialog的时候,喜欢自己 ... -
ScrollView scrollTo 的使用 动画效果
2013-08-05 17:43 4624今天用到了ScrollView scrollTo方法 ... -
Android中View绘制优化二一---- 使用<include />标签复用布局文件
2012-09-08 13:54 1069... -
Android中View绘制优化之三---- 优化View
2012-09-13 21:00 1090... -
兰林任务管理应用程序雏形版以及概要说明
2012-09-15 21:54 888... -
Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)
2012-10-10 18:14 1182... -
Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)
2012-10-17 20:05 877... -
Android中文件选择器的实现
2012-11-30 08:59 1189... -
【编译原理】使用Lex将C/C++文件输出为HTML文件
2012-07-20 09:37 108708年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ... -
【编译原理】正则表达式
2012-07-21 21:49 232908年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ... -
【OpenCV】访问Mat图像中每个像素的值
2012-07-22 07:10 1185今天百度搜资料还搜到了自己的。。。《访问图像中每个像素的值 ... -
【编译原理】用Yacc做语法分析
2012-07-23 05:47 180708年9月入学,12年7月毕 ... -
【UML】UML几种图的绘制
2012-07-24 09:49 99508年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ... -
【OpenCV】邻域滤波:方框、高斯、中值、双边滤波
2012-07-26 10:52 1470邻域滤波(卷积) 邻域算子值利用给定像素 ... -
【数据结构】排序算法:希尔、归并、快速、堆排序
2012-07-28 06:15 103608年9月入学,12年7月毕 ... -
【OpenCV】角点检测:Harris角点及Shi-Tomasi角点检测
2012-07-31 13:25 1554角点 特征检测与匹配 ... -
【UML】案例分析:机场运作系统
2012-08-01 17:22 315108年9月入学,12年7月毕 ... -
【OpenCV】边缘检测:Sobel、拉普拉斯算子
2012-08-04 13:41 1559边缘 边缘(edge)是指图像局部强度变化最显著的部分。主要 ...
相关推荐
在Android开发中,View是构建用户界面的基本元素,它的绘制流程是开发者理解并优化UI性能的关键。本篇文章将深入探讨Android中View的绘制流程,以及如何通过自定义ViewGroup进行更复杂的布局管理。 首先,我们要...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的用户界面组件。本文将深入探讨如何在Android中实现自定义组合View,即结合多个基本View来构建复杂视图。 首先,理解...
在Android开发中,自定义View是一项重要的技能,它允许开发者创造出独特且富有创新性的用户界面。本主题将深入探讨如何创建一个LED数字时钟的自定义View,这是一款结合了多个基本控件并以LED风格显示时间的组件。LED...
"Android代码-原创自定义控件之-Canvas实时绘制音乐波形图"这个项目旨在创建一个能够实时展示音乐波形的自定义View,通过Canvas进行图形绘制。尽管项目已废弃,但其中涉及的知识点仍对Android开发者具有参考价值。 ...
在提供的"Android中自定义View之流式布局的Demo"中,我们可以看到这些关键步骤的实现。代码中的注释会解释每一步的目的和原理,帮助开发者理解自定义View的工作机制。通过阅读和分析这个Demo,可以加深对Android布局...
此外,如果你需要在弹窗中展示更丰富的信息,可以自定义一个对话框布局文件,通过LayoutInflater加载布局并设置到AlertDialog中。 ```java LayoutInflater inflater = LayoutInflater.from(context); View ...
总之,“Android自定义View-圆环布局”是一个涵盖了Android自定义视图、动画、触摸事件处理、图形绘制等多个技术领域的实践案例。通过学习和研究,开发者可以提升自己的Android UI开发能力,创造出更多创新和有趣的...
在Android应用开发中,布局优化是提升应用性能和用户体验的关键环节。有效的布局优化可以减少内存消耗,加快界面渲染速度,并提高应用的响应性。本文将深入探讨如何利用`include`、`ViewStub`和`merge`标签进行...
综上所述,这个"Android-自定义View绘制一个太极旋转图片demo"涵盖了Android开发中的自定义视图绘制、动画效果以及资源管理等多个核心知识点。通过实践这个项目,开发者不仅可以提升Android图形绘制的能力,还能掌握...
因此,性能优化成为了提升用户体验的关键因素之一。性能不佳的应用不仅会导致用户体验下降,还会增加电量消耗、降低设备运行效率,甚至可能导致用户的流失。 ### 性能优化的重要性 1. **改善用户体验**:优化后的...
本文将探讨Android系统显示原理、性能分析工具、布局优化、避免过度绘制、合理的刷新机制、提升动画性能以及卡顿监控方案。 一、Android系统显示原理 Android的显示过程涉及到应用程序层的绘制和系统层的渲染。...
在Android开发中,自定义View是一项重要的技能,它允许开发者创造出独特且富有表现力的UI元素,以满足特定的应用需求。本实战将聚焦于创建一个圆盘形状的温度计,这是一个典型的自定义View实例,旨在展示如何从零...
然后在XML布局文件中使用`GifImageView`,或者在代码中创建`GifDrawable`实例并绑定到自定义View。 6. **性能考量** 虽然`android-gif-drawable`库做了很多性能优化,但在内存有限的移动设备上,加载大型GIF仍...
本主题聚焦于“Android自定义View之几何图形绘制”,特别是如何利用Android的Canvas API来构建维度图表,如模仿京东白条个人信用评分的维普图。下面将详细介绍这个过程中的关键知识点。 首先,理解Android的View类...
"the Trapezoid Parts View"是这个项目的核心类,它继承自Android的基础视图类`View`或`ViewGroup`,根据描述中的"draw Trapezoid image"推断,可能是直接继承自`View`,因为通常自定义绘图操作是在`View`中完成的。...
在Android开发中,View是构建用户界面的基本元素,它的绘制流程和`invalidate()`等相关方法是开发者需要深入理解的关键概念。本文将详细解析Android中View的绘制流程,以及`invalidate()`等核心方法的工作原理。 ...
在Android开发中,自定义View是一项常见的需求,它允许开发者根据特定的设计要求或者功能扩展来创建独特的用户界面组件。本文将深入探讨如何实现一个自定义的View,使其能够精确地绘制水平和垂直居中的文本,效果...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的UI组件。本项目"Android 自定义View实现水平温度计"就是这样一个实例,它通过自定义View来展示一个水平方向的温度计,...
在Android应用开发中,代码布局是至关重要的一个环节。它涉及到UI设计、用户交互以及程序逻辑的组织。本文将深入探讨Android程序源码中的代码布局,包括XML布局文件、Java/Kotlin代码与布局的交互、以及如何优化布局...