View优化(一)

1,View的相关分析工具
1.1 Hierarchyviewer
Hierarchy Viewer是随AndroidSDK发布的工具,位置在tools文件夹下,名为hierarchyviewer.bat,双击即可运行。它是Android自带的非常有用而且使用简单的工具,可以帮助我们更好地检视和设计用户界面(UI)。
具体来说主要功能有2个:
1. 从可视化的角度直观地获得UI布局设计结构和各种属性的信息,帮助我们优化布局设计;
2. 结合debug帮助观察特定的UI对象进行invalidate和requestLayout操作的过程。
1.2 显示GPU过渡绘制
可以在手机打开 设置–>开发者选项–>显示GPU过度绘制,这个开关的作用是按 不同颜色值来显示布局的过度绘制,绘制的层次从最优到最差:
蓝–>绿–>淡红–>红:
蓝色 1x过度绘制
绿色 2x过度绘制
淡红色 3x过度绘制
红色 超过4x过度绘制

《View优化(一)》 图片1.png

为了有更直观的认识,这里有一个简单的布局:

<RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android
xmlns:tools=”http://schemas.android.com/tools
android:layout_width=”match_parent”
android:layout_height=”match_parent” >
<LinearLayout
android:layout_width=”match_parent”
android:layout_height=”400dp”
android:background=”#ffffff”
android:orientation=”vertical” >
<LinearLayout
android:layout_width=”match_parent”
android:layout_height=”300dp”
android:background=”#ffffff”
android:orientation=”vertical” >
<LinearLayout
android:layout_width=”match_parent”
android:layout_height=”200dp”
android:background=”#ffffff”
android:orientation=”horizontal” >
<ImageView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_gravity=”center_vertical”
android:src=”@drawable/ic_launcher” />
<TextView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_gravity=”center_vertical”
android:text=”简单测试” />
<TextView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_gravity=”center_vertical”
android:background=”#ffffff”
android:text=”简单测试” />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<TextView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_alignParentBottom=”true”
android:text=”简单测试” />
</RelativeLayout>

这个xml文件的视图其实可以很清晰的看出哪些布局过渡绘制。
目标: 我们在布局时候,尽量减少红色Overdraw,看到更多的蓝色区域。
1.3 Android Lint
该工具主要是用来检查工程中代码的不合理,布局不合理,资源重复,图片重复等,让开发者进一步优化自己的应用。详细了解可网上搜索学习使用。一般情况下,我们遇到的Lint问题都需要逐个解决,避免不必要的可能导致的应用崩溃等。
2.View优化:
2.1.View布局优化

  1. 确保每个布局都合适地被使用,认真考虑布局中的每个属性的使用,能简化则简化之。多考虑是否有其他更优的布局方案替换当前的方案。
  2. 能实现同样的布局效果,尽量使用Relativelayout以减少布局文件中View对象的个数,减少内存的占用。某些情况也可考虑LinearLayout. 如嵌套的LinearLayout较少时,小屏幕手机适配时。
    a)Relativelayout相对LinearLayout的优势:
    i.比较容易实现各种布局样式,相对线性布局可减少View对象创建的个数, 减少内存的占用
    ii.比较灵活的布局形式
    LinearLayout中如果使用了layout_weight 属性会使其在measure时比较消耗时间。所以慎用LinearLayout和它的layout_weight属性。
  3. 布局宽度和高度单位使用dip(dp), 不要使用px;
  4. 文字大小单位使用sp;
  5. 内容较多界面使用ScrollView包裹;
  6. 使用 style主题来定义一个通用的属性,从而重复利用代码,既可以减少代码量,又方便以后项目代码维护。
  7. 将布局扁平化,减少根节点,减少布局嵌套的层次。如使用TextView可以设置四个方向图片来直接替代LinearLayout下包裹一个ImageView 和TextView,从而减少了一层嵌套布局。如下图微信界面优化后的效果:
    引用自:http://www.2cto.com/kf/201506/412711.html
    《View优化(一)》 图片2.png
  8. 不重复设置属性。嵌套多个子布局时,能在父布局中设置的属性,就不在子布局中单独设置,如多个子布局并列时的padding属性,既有助于提高性能,又减少代码量,方便维护。
  9. 使用一些功能强大的控件优化布局。如V7包中的 LinearLayoutCompat 组件来实现线性布局元素之间的分割线,从而减少了使用View来实现分割线效果。LinearLayoutCompat的具体内容可参考 http://blog.csdn.net/feiduclear_up/article/details/46619637
  10. 优化GPU过度绘制:
    i.优化布局,减少层级,减少嵌套
    ii.减少没必要的背景background设置(显示GPU过度绘制中的例子)
    iii.给Activity定义一个Theme,通过theme定义背景可以减少一层
    原文作者:小王泽哥
    原文地址: https://www.jianshu.com/p/bd94fdb8a222
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞