zoukankan      html  css  js  c++  java
  • 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类似属性)

  • 相关阅读:
    Redis 详解 (一) StackExchange.Redis Client
    redis在.net架构中的应用(1)--利用servicestack连接redis
    .NET中使用Redis:http://www.cnblogs.com/yangecnu/p/Introduct-Redis-in-DotNET.html
    SQL Server日期函数总结
    SQL Server 日期和时间函数
    16Aspx源码论坛
    方差和偏差的区别
    写在中秋节的前?秒
    装系统那些事儿-1-电脑的启动流程
    查找重复的数
  • 原文地址:https://www.cnblogs.com/seven1979/p/4346095.html
Copyright © 2011-2022 走看看