Android 高效的 Layout

心静志远 | 技术会被淘汰,但思想会一直永存(多思考,多总结,多分享)

我们知道随着我们业务越来越负责,UI布局也会越来越复杂,大量的布局信息必定会带来一定的性能损耗,那么我们怎么才能写出高效的布局呢?

1. 使用 <include> <merge> <viewStub>标签。

https://developer.android.com/training/improving-layouts/optimizing-layout.html

2.?LinearLayout中减少使用layout_weight参数,因为使用此属性会导致子元素被测量两次。

3. 学会测量Layout的层次结构,优化布局

https://developer.android.com/training/improving-layouts/optimizing-layout.html

4.?使得Layout宽而浅,而不是窄而深(在Hierarchy Viewer的Tree视图里面体现)

连接真机时,HierarchyVIewer报错了:无法加载设备上的窗口数据

原因:若需要使用hierarchyviewer,需要手机上开启对应的ViewServer服务。Hierarchy Viewer在连接手机时,手机上必须启动一个叫View Server的客户端与其进行socket通信。而在商业手机上,是无法开启View Server的,故Hierarchy Viewer是无法连接到普通的商业手机。

解决办法:

方法一:使用模拟器。

方法二:App中需要开启View Server,可以参考一下连个类的实现。

http://pan.baidu.com/s/1sjIulYl?提取码:wrc8

使用方法:

引入ViewServer.java 类到Util包中,在需要查看Layout层次结构的Activity类中,

加入以下代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
????super.onCreate(savedInstanceState);
????
????ViewServer.get(this).addWindow(this);
}
?
@Override
public void onDestroy() {
????super.onDestroy();
????ViewServer.get(this).removeWindow(this);
}
?
@Override
public void onResume() {
????super.onResume();
????ViewServer.get(this).setFocusedWindow(this);
}

5. 使用Lint工具来优化Layout

> 使用merge根框架 – 如果FramLayout仅仅是一个纯粹的(没有设置背景,间距等)布局根元素,我们可以使用merge标签来当作根标签;

>?无用的分支 – 如果一个layout并没有任何子组件,那么可以被移除,这样可以提高效率

>?无用的父控件 – 如果一个layout只有子控件,没有兄弟控件,并且不是一个ScrollView或者根节点,而且没有设置背景,那么我们可以移除这个父控件,直接把子控件提升为父控件

> 深层次的layout – 尽量减少内嵌的层级,考虑使用更多平级的组件 RelativeLayout or GridLayout来提升布局性能,默认最大的深度是10

Lint工具在android Studio中的使用:

Analyze → Inspect code 这个时候会自动启动Lint工具。

6. 虽然官方说LinearLayout 与 RelationLayout在性能上相差无几,但是能使用relative layout的地方尽量不要使用LinearLayout。

7. 有同事对比了RelationLayout 与 FrameLayout的性能,发现FrameLayout性能比RelationLayout更优。原因很简单:因为FrameLayout比RelationLayout更简单,没有那么多属性,所有效率更高。无论是使用那种布局,在都能满足需求的情况下,只要记住,使用属性跟少、更简单的布局方式一定是没错的。

http://stackoverflow.com/questions/22875453/framelayout-vs-relativelayout-for-overlays

8.?对于textview和imageview组成的layout,直接使用textview替换(drawableTop类似属性)

时间: 2024-10-12 20:02:47

Android 高效的 Layout的相关文章

Android 高效的SQLite型数据库greenDAO使用

使用:在你project项目的build.gradle配置如下:buildscript {repositories {mavenCentral()}dependencies {classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'}} // 使用数据库升级辅助GreenDaoUpgradeHelper时添加allprojects {repositories {maven { url "https://jitpack.io" }}}

Android五大布局Layout

 Android开发中,我们可能会遇到过一些很复杂的布局,对于初学者来说,可能脑子会嗡的一下,"这么复杂!该怎么整?!". 不要担心!再复杂的布局其实也是由简单地布局组成的,我们要学会将它分解成基本的布局,那么问题就迎刃而解了. Android共有五种常见布局方式,分别是:LinearLayout(线性布局),FrameLayout(单帧布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局). 下面首先看一下这

Android高效内存之让你的图片省内存

Android高效内存之让你的图片省内存 在做内存优化的时候,我们发现除了解决内存泄露问题,剩下的就只有想办法减少真实的内存占用.而在App中,大部分内存可能被我们图片占用了,所以减少图片的内存占用可以带来直接的效果. 一.一张图片到底占用多少内存 我们先假设我们有一张图片是600 * 800像素的,图片磁盘占用空间大小假设是 100KB. 图片内存大小跟磁盘占用空间大小有什么关系? 磁盘占用空间的大小不是图片占用内存的大小,磁盘占用空间是在磁盘上存储图片需要的一个空间大小,内存大小是加载到内存

Android measure和layout的一点理解

首先,推荐文章,http://blog.csdn.net/hqdoremi/article/details/9980481,http://www.docin.com/p-571954086.html 我理解measure的作用有2个:一个就是调用子view的measure函数,生成他们的高度和宽度,以便在自己的layout阶段参考:另一个是为父view提供关于自己的测量的width和height(这个宽度和高度往往和子view的测量高度和宽度有关),以便父view在layout阶段参考. lay

Android - HelloWorld的Layout内容

Android - HelloWorld的Layout内容 本文地址: http://blog.csdn.net/caroline_wendy 作为最基础的Android程序, HelloWorld的XML文件能够作为測试使用. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools&q

Android 高效加载大图,多图解决方案,有效避免程序OOM

高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状.不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统图片库里展示的图片大都是用手机摄像头拍出来的,这些图片的分辨率会比我们手机屏幕的分辨率高得多.大家应该知道,我们编写的应用程序都是有一定内存限制的,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常.我们可以通过下面的代码看出每个应用程序最高可用内存是多少. [java] view plaincopy in

Android 高效开发的一些小技巧总结

Android 高效开发的一些小技巧总结 善用快捷键 关于快捷键的使用,请戳这里 经常看到有人在一行一行的手工复制粘贴代码,或者一个变量一个变量的改名称.每次看到,心里都会一个劲的在吐槽:不要这么鸡肋好吗. 善用批处理(命令行) adb shell 命令大家应该都是会用的吧,比如 adb uninstall com.xxx.xxx 用来卸载程序,但是很少有人把他写到批处理里面吧. 日常Android开发中,我们经常需要卸载已安装的应用,或者清除应用的缓存等等,如果应用的缓存目录保存在内存卡中的话

Android 高效加载大图片避免OOM

参考链接:http://blog.csdn.net/coderinchina/article/details/40964205 我们项目中经常会加载图片,有时候如果加载图片过多的话,小则导致程序很卡,重则OOM导致App挂了,今天翻译https://developer.android.com/training/displaying-bitmaps/index.html,学习Google高效加载大图片的方法. 图片有各种形状和大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统

Android高效计算——RenderScript(一)

高效计算——RenderScript RenderScript是安卓平台上很受谷歌推荐的一个高效计算平台,它能够自动把计算任务分配到各个可用的计算核心上,包括CPU,GPU以及DSP等,提供十分高效的并行计算能力.可能是由于应用开发时的需求不够,关于RenderScript的相关文章很少,刚好我在工作中应用到此平台,做了一些笔记,因此决定整理成博文分享给大家.内容主要来源于官方文档.StackOverflow以及自己的理解,如有错误,请大家指正.本篇主要介绍RenderScript的基本概念.