10.1Android性能优化之布局优化

10.1.1 Android UI渲染机制

 1000/60=16ms,UI运行非常流畅,此时我们看到的UI界面将是非常流畅的,如果UI不能在16ms内完成绘制,将会出现丢帧现象,造成画面卡顿。

Android系统提供了检测UI渲染时间的工具,”开发者选项“中的”Profile GPU Rending“,并选中”On screen as bars“,(无图)

10.1.2避免Overdraw

 过度绘制,Android系统在开发者选项中提供了”Enable GPU Overdraw“,激活后,可显示Overdraw次数。

10.1.3优化布局层级

 因为在Android中,系统对View的测量、布局和绘制都是要通过对View树的遍历来进行操作的,所以我们尽可能的降低这棵树的高度,Google在API文档中建议VIew的高度不超过10层,RelativeLayout布局属于扁平型,有利于降低布局树的高度,从而提高UI渲染的效率。

10.1.4避免嵌套过多无用布局‘

    10.1.4.1 使用<include>标签重用Layout

      目的就是可以让通用的UI在不同的Layout组件中都可以被调用,简单的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:textSize="30sp"
    android:gravity="center"
    android:text="Call_me_Mr_Qian">
</TextView>
    代码中只有一个TextView,宽和高都给了我0dp,这样我们才能迫使开发者对宽高进行赋值,否则不可见。

    下面是如何使用include标签的代码,非常简单,

<include layout="@layout/textdemo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
   显示的效果如下

            

10.1.4.2 使用<ViewStub>实现View的延迟加载

          ViewStub是一个非常轻量级的组件,不仅不可视而而且大小为零。主要作用是延迟加载,初始化时不加载,点击某个按钮时才会显示出来,举个栗子:

private View.OnClickListener monClicklistener=new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_visible:
                    //Visible方法
                    vs_show.setVisibility(View.VISIBLE);
                    break;
                case R.id.btn_inflate:
                    //inflate方法,该方法可以返回引用的布局,从而可以找到布局文件
                  View inflateView=vs_show.inflate();
                    TextView tv_call= (TextView) inflateView.findViewById(R.id.tv_call);
                    tv_call.setText("callMeMrQian");
                    break;
            }
        }
    };
点击的效果分别是:



注意无论是哪种方式,一旦ViewStub被设置为可见或者被inflate了,viewStub就不存在了,取而代之的是被Inflater的Layout,并将这个Layout的ID重新设置为ViewStub中通过android:inflateId属性所指向的ID,所以调用两次inflate会报错;

10.1.5 Hierarchy Viewer

 检测布局是否冗长,很实用的优化工具。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值