Android

性能优化之UI优化

2019-10-28  本文已影响0人  大佬的上半生
1.过度绘制(overdraw)*检测

Overdraw(过度绘制)描述的是屏幕上的某个像素在同一帧的时间内被绘制了多次。在多层次的UI结构里面, 如果不可见的UI也在做绘制的操作,这就会导致某些像素区域被绘制了多次。这就浪费大量的CPU以及GPU资源。按照以下步骤打开Show GPU Overrdraw的选项:设置 -> 开发者选项 -> 调试GPU过度绘制 -> 显示GPU过度绘制

淡绿,淡红,深红代表了4种不同程度的Overdraw情况,

2.Overdraw 的处理方案
3.减少不必要的层次六:巧用Hierarchy Viewer

Hierarchy Viewer接触过Android的人估计都用过,如果在真机上可以
使用ViewServer这个第三方库:https://github.com/romainguy/ViewServer,配置步骤比较简单,主要分为如下三步:
第一步,在根build.gradle文件中加入

allprojects {
repositories {
    jcenter()
    maven { url "https://jitpack.io" }
}}

第二步,在Module的build.gradle文件中加入

dependencies {
...................................
compile 'com.github.romainguy:ViewServer:017c01cd512cac3ec054d9eee05fc48c5a9d2de'
}

第三步,加上访问网络权限,在Activity添加下列代码

   public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        // Set content view, etc.  
        ViewServer.get(this).addWindow(this);  
    }  
    public void onDestroy() {  
        super.onDestroy();  
        ViewServer.get(this).removeWindow(this);  
    }  
    public void onResume() {  
        super.onResume();  
        ViewServer.get(this).setFocusedWindow(this);  
    } ```
 

它只能在root过的机器才能使用,可以帮我们减少View的层,在Hierarchy Viewer窗口中,所有的子View上面都有了3个圈圈, (取色范围为红、黄、绿色),这三个圈圈分别代表measure 、layout、draw的速度,并且你也可以看到实际的运行的速度,如果你发现某个View上的圈是红色,那么说明这个View相对其他的View,该操作运行最慢,注意只是相对别的View,并不是说就一定很慢。

####布局常见问题与优化建议
- 没有用的父布局时指没有背景绘制或者没有大小限制的父布局,这样的布局不会对UI效果产生任何影响。我们可以把没有用的父布局,通过标签合并来减少UI的层次;
- 使用线性布局LinearLayout排版导致UI层次变深,如果有这类问题,我们就使用相对布局RelativeLayout代替LinearLayout,减少UI的层次;
- 不常用的UI被设置成GONE,比如异常的错误页面,如果有这类问题,我们需要用标签,代替GONE提高UI性能。
上一篇下一篇

猜你喜欢

热点阅读