当你在Application中创建复杂的布局时。页面的渲染过程也变得更加缓慢。

此时,我们须要利用 <include />标签(避免反复渲染)和 ViewStub类(延迟载入)来优化我们的页面。
(原文地址:http://blog.csdn.net/vector_yi/article/details/24402101)
一、利用<include />标签来避免反复渲染
当我们须要为App中的每一个View都加入一个header或者footer时,你会怎么做?
反复地复制粘贴能够解决问题,但未免太繁杂。能够试着使用<include />标签:
第一种方式。在<include />标签内指定width及height:
main.xml

<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"android:layout_width= "fill_parent"android:layout_height= "fill_parent" ><Buttonandroid:layout_width ="fill_parent"android:layout_height ="wrap_content"android:layout_gravity ="center_vertical"android:onClick ="onShowMap"android:text ="@string/show_map" /><includeandroid:layout_width ="fill_parent"android:layout_height ="wrap_content"android:layout_alignParentBottom ="true"android:layout_marginBottom ="30dp"layout ="@layout/footer" /></RelativeLayout>
footer.xml
<TextView xmlns:android = "http://schemas.android.com/apk/res/android"android:layout_width= "0dp"android:layout_height= "0dp"android:gravity= "center"android:text= "@string/footer_text" />
有个小细节须要注意。在footer.xml中,我们将width及height都设为0dp.目的是为了配合<include/>标签中对width及height的定义
另外一种方式。直接引用:
main.xml

<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"android:layout_width= "fill_parent"android:layout_height= "fill_parent" ><Buttonandroid:layout_width ="fill_parent"android:layout_height ="wrap_content"android:layout_gravity ="center_vertical"android:onClick ="onShowMap"android:text ="@string/show_map" /><include layout ="@layout/footer" /></RelativeLayout>
footer.xml
<TextView xmlns:android = "http://schemas.android.com/apk/res/android"android:layout_width= "fill_parent"android:layout_height= "wrap_content"android:layout_alignParentBottom= "true"android:layout_marginBottom= "30dp"android:gravity= "center"android:text= "@string/footer_text" />
二、利用ViewStub类来延迟载入视图
在设计视图时,有时会考虑到某些视图的可见性是依赖于用户的操作或者执行设备的详细环境的。
此时你会怎样设计?不过改变View的visible属性?
我们先来看看ViewStub的介绍:
     ViewStub是一个不可见、不占空间(zero-sized)的控件。它能够用来在执行时延迟载入视图资源。仅仅有当我们将ViewStub的可见性设为true。或者调用inflate()方法,它的视图资源才会被载入。

如果我们设计的一个页面中包括地图View,试想一下下面这样的情况:
     有些用户不须要看到地图。
既然用户不须要看到地图,我们为何还坚持不懈地载入它?这反而影响了我们App的Performance。
此时,我们就能够利用ViewStub类了:
main.xml

<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"android:layout_width= "fill_parent"android:layout_height= "fill_parent" ><Buttonandroid:layout_width ="fill_parent"android:layout_height ="wrap_content"android:layout_gravity ="center_vertical"android:onClick ="onShowMap"android:text ="@string/show_map" /><ViewStubandroid:id ="@+id/map_stub"android:layout_width ="fill_parent"android:layout_height ="fill_parent"android:inflatedId ="@+id/map_view"android:layout ="@layout/map" />
</RelativeLayout>

map.xml

<com.google.android.maps.MapView xmlns:android ="http://schemas.android.com/apk/res/android"android:layout_width= "fill_parent"android:layout_height= "fill_parent"android:apiKey= "my_api_key"android:clickable= "true" />
接下来看看MainActivity
public class MainActivity extends MapActivity {private View mViewStub;@Overridepublic void onCreate (Bundle savedInstanceState ) {super. onCreate( savedInstanceState );setContentView( R. layout. main);mViewStub = findViewById( R. id. map_stub);}public void onShowMap (View v) {mViewStub. setVisibility (View .VISIBLE );}
....
}
如你所见。在须要显示图像时我们才调用onShowMap来改变map_stub的可见性。在改变之前。map_stub都不会渲染载入视图资源。
小结:
     1.当我们的页面变得复杂,XML文件内容过多时。<include />标签能够有效地帮助我们整理文件内容,同一时候提高了XML文件的可读性。同一时候,它的使用方法也与Fragment类似。
     2.ViewStub是一个极佳的延迟载入视图资源的方式。仅仅要你设计的视图是依赖于上下文来改变其可见性的,就利用ViewStub类吧。

或许当你仅仅将其应用在一个简单的页面其中时,并不会感觉到在性能上有不论什么提升,可是在复杂页面中,它的效果是极佳的。

50个Android开发技巧(02 延迟载入和避免反复渲染视图)相关推荐

  1. 50个Android开发技巧(09 避免用EditText对日期进行验证)

    我们都知道,在表单中对数据进行验证不但无聊并且easy出错. (原文地址:http://blog.csdn.net/vector_yi/article/details/24424713) 想象一下,一 ...

  2. Android开发技巧——大图裁剪

    本篇内容是接上篇<Android开发技巧--定制仿微信图片裁剪控件> 的,先简单介绍对上篇所封装的裁剪控件的使用,再详细说明如何使用它进行大图裁剪,包括对旋转图片的裁剪. 裁剪控件的简单使 ...

  3. Android开发技巧——自定义控件之自定义属性

    Android开发技巧--自定义控件之自定义属性 掌握自定义控件是很重要的,因为通过自定义控件,能够:解决UI问题,优化布局性能,简化布局代码. 上一篇讲了如何通过xml把几个控件组织起来,并继承某个 ...

  4. Android开发技巧——自定义控件之组合控件

    Android开发技巧--自定义控件之组合控件 我准备在接下来一段时间,写一系列有关Android自定义控件的博客,包括如何进行各种自定义,并分享一下我所知道的其中的技巧,注意点等. 还是那句老话,尽 ...

  5. 一些很不错的Android开发技巧

    一些很不错的Android开发技巧,这个项目翻译自 android-tips-tricks 去掉了一些我认为不重要的,对我使用过的东东做了评价,同时翻译了一些自己没有注意到的知识点的文章. ❤️ st ...

  6. android开发技巧杂谈

    android开发技巧一 android的一些常用包是发布在国外的,所以一些包,我们下载不下来,我们可以使用阿里云的镜像地址(maven { url 'https://maven.aliyun.com ...

  7. 社区说|常用 Android 开发技巧

    活动时间 4月7日(本周四) 20:00-21:00 活动日程 20:00-20:45 主题分享 常用 Android 开发技巧 李老师的开发技巧私房菜,一定有你没吃过的菜! 重构技巧 常用插件 阅读 ...

  8. Android开发技巧!高级Android晋升之View渲染机制,Android篇

    前言 众所周知,Xamarin应该是.net下的跨平台开发工具.2016年之前还处于收费状态,后被微软收购后开源.但似乎有个现象,开源后的Xamarin发展似乎有些停滞,而且维护Xamarin的团队又 ...

  9. 移动周刊第 182 期:谈 Android 开发技巧、 iOS 系统框架实践

    写在前面 移动周刊第 182 期如约而至.如果你有好的文章以及优化建议,请发送邮件至mobilehub@csdn.net,在技术探索的道路上我们共同进步. YouTube 推出 VR 视频和 360 ...

  10. Android开发技巧!Android开发大佬的百度,美团,快手等大厂Offer收割之旅,附超全教程文档

    想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样. 本文参考了目前大部分 Android 应用启动优化的方案,将大家的方案做一个汇总,如果你有这方 ...

最新文章

  1. MonoRail学习笔记一:一个小例子
  2. 自己动手在 Linux 系统实现一个 everything 程序
  3. Windows 7删需要权限的文件
  4. java.lang.UnsatisfiedLinkError
  5. 函数集成redis与Spring集成
  6. GridView使用一些记录
  7. 问题 C: PK没有女朋友(判断是否存在1个三元环,dfs)
  8. 做红颜知己就要恪守界限
  9. Java常用的知识点就20_JAVA中一些需要记录的知识点
  10. 【转】TFS测试管理
  11. Hadoop集群环境下网络架构的设计与优化
  12. java nat 端口转发_NAT网络地址转换——静态NAT,端口映射(实操!!)
  13. Python垃圾回收和内存管理
  14. @广州开发者,华为送来一份说明书——助你轻松应对开发难题
  15. WinEdt 打开***.bib文件时 error reading
  16. vue项目history路由的配置
  17. Java导出Excel每列求和,POI导出excel执行自动求和
  18. python 检验两个样本均值是否相同_假设检验|第四章:置信区间和置信水平
  19. 成语接龙(英语单词链)
  20. Ubuntu16.04 安装docker-ce [傻瓜教程]

热门文章

  1. Atitit。监听键盘上下左右方向键事件java js jquery c#.net
  2. atitit.web的动态include 跟变量传递 java .net php
  3. Rust : rust-bindgen中ffi中类型转换
  4. 为企业发展赋能,让零散数据资源变为企业数据资产
  5. SQLite: 关于日期的标准化问题
  6. Julia:关于split的用法
  7. 阿里云最新虚拟化研发岗招聘
  8. 【图像几何】基于matlab GUI图像拉东变换【含Matlab源码 848期】
  9. oracle事件跟踪器使用,Oracle 10046跟踪事件操作步骤
  10. ymodem传输的终端工具_国六在线监控OBD终端H6S信息安全防篡改技术实现