文档章节

Android App界面和流畅度优化

东风玖哥
 东风玖哥
发布于 2017/04/29 17:36
字数 858
阅读 40
收藏 1

所谓界面和流畅度优化,就是尽可能多地消除用户可直接感知的、影响用户操作体验的bug

1、人为在UI线程中做轻微耗时操作,导致UI线程卡顿

人为避免一切耗时操作

开启 StrictMode(严苛模式)

在Activity里加入如下代码

  1. public void onCreate() {  
         if (DEVELOPER_MODE) {  
             StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()  
                     .detectDiskReads()  
                     .detectDiskWrites()  
                     .detectNetwork()   // or .detectAll() for all detectable problems  
                     .penaltyLog()  
                     .build());  
             StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()  
                     .detectLeakedSqlLiteObjects()  
                     .detectLeakedClosableObjects()  
                     .penaltyLog()  
                     .penaltyDeath()  
                     .build());  
         }  
         super.onCreate();  
     }  

     

注意:StrictMode只适用于测试版本,千万不要在上线版本使用 StrictMode

2、布局Layout过于复杂,无法在16ms内完成渲染
利用drawableXXX属性来做有图文的控件,特别是类似设置页面中文字在左右边有剪头的View
多用tools的属性例如tools:text tools:listitem

3、同一时间动画执行的次数过多,导致CPU或GPU负载过重
人为避免同一时间执行过多动画

4、View过度绘制,导致某些像素在同一帧时间内被绘制多次
简化布局嵌套
减少不必要的背景颜色填充(用纯色图片代替颜色)

在设置-> 开发者选项->调试GPU过度绘制中打开调试
定位绘制区域
利用Android提供的工具进行位置确认以及修改(HierarchyView,Tracer for OpenGL ES)
定位到具体的视图(xml文件或者View)
通过代码和xml文件分析过度绘制原因
结合具体情况进行优化

5、View频繁触发onMeasure,onLayout,导致onMeasure,onLayout累计耗时过多及整个View频繁的重新渲染
使用系统性能分析工具systrace分析measure, layout耗时

6、内存频繁触发GC过多(同一帧中频繁创建内存),导致暂时阻塞渲染操作
使用内存分配跟踪工具Allocation Tracker工具跟踪对象的分配

7、冗余资源及逻辑等导致加载和执行缓慢
lint检查删除冗余
去除重复库无用库,使用更小库
去除无用的语言资源
图片压缩webp
开启ProGuard
开启shrinkResources

[java] view plain copy 在CODE上查看代码片派生到我的代码片

  1. buildTypes{  
        release{  
            miniyEnabled true  
            shrinkResources true  
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
        }  
    }   

     


8、代码效率低
考虑使用ArrayMap代替传统数据结构HashMap
避免使用enums,推荐使用static

避免在非Constants类中使用static

其他详见《大话Java性能优化》

9、其他
对于不需要使用硬件加速的activity(没有动画效果、视频播放以及各种多媒体文件),不要在AndroidManifest.xml文件声明activity时添加“android:hardwareAccelerated="true"”关掉硬件加速可节省应用内存

对于需要横竖屏转换的应用,又不想在横竖屏切换的时候重新跑onCreate方法,可以在AndroidManifest.xml文件声明Activity时添加“android:configChanges="screenSize|orientation"”

为了减轻应用程序主进程的内存压力,对于耗内存比较多的界面(多媒体),可以在AndroidManifest.xml文件声明Activity时下添加“android:process=".processname"”单开一个进程,退出在退出这个界面的时候一定要在该界面的onDestory方法中调用System的kill方法来杀掉该进程;

可以通过为application、activity自定义主题的方式来关掉多点触摸功能,只需要在自定义的主题下添加这两个标签:
 

<item name="android:windowEnableSplitTouch">false</item>
<item name="android:splitMotionEvents">false</item>

 

© 著作权归作者所有

共有 人打赏支持
东风玖哥
粉丝 6
博文 3
码字总数 3711
作品 0
合肥
流言终结者- Flutter和RN谁才是更好的跨端开发方案?

背景 论坛上很多小伙伴关心为什么闲鱼选择了Flutter而不选择其他跨端方案?站在质量的角度,高性能是一个很重的因素,我们使用Flutter重写了宝贝详情页之后,对比了Flutter和Native详情页的性...

闲鱼技术
09/10
0
0
Android HWUI硬件加速模块浅析

原址 什么是硬件加速(What) 传统软件的UI绘制是依靠CPU来完成的,硬件加速就是将绘制任务交由GPU来执行。Android系统负责硬件加速的模块主要是HWUI,如下图所示: 为什么要硬件加速(Why)...

u010164190
04/27
0
0
实现Android手机屏幕投影到电脑进行演示

最近要在公司的会议上演示App,需要在投影仪上显示出来给大家演示。由于投影仪不是智能投影仪,只能将App先投影到自己的笔记本上,然后再将笔记本上的内容投影到投影仪上。该App是个游戏,实...

IT达仁
06/26
0
0
Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)

前言 在 开发中,性能优化策略十分重要 因为其决定了应用程序的开发质量:可用性、流畅性、稳定性等,是提高用户留存率的关键 本文全面讲解性能优化中的所有知识,献上一份 性能优化的详细攻...

Carson_Ho
05/30
0
0
Android ListView复杂列表优化实践

原文:Android ListView复杂列表优化实践 很多社交App都不免会涉及到复杂的列表元素实现,一个列表上面可能大量的图片,不定长的评论列表,给手机端的程序员带来了不少的挑战。本文就是在实现...

程序袁_绪龙
2015/02/07
0
1

没有更多内容

加载失败,请刷新页面

加载更多

CentOS 7.* 配置网络

配置静态IP 进入配置文件目录 cd /etc/sysconfig/network-scripts 查找以 ifcfg-eno 开头的文件并编辑它 vi ifcfg-ens32 修改文件中的变量值 BOOTPROTO=staticONBOOT=yesIPADDR=192.168...

阿白
34分钟前
0
0
深入理解OAuth2.0协议

1. 引言 如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间。是否有好办法可以避免这个问题呢?有的,听说有一些豪车的车主就不担心这个问题。豪车一般配备两种钥匙:主钥匙和泊...

xtof
39分钟前
1
0
Linux学习-0920

3.4 usermod命令 3.5 用户密码管理 3.6 mkpasswd命令 一、usermode命令 usermode作用是用来修改用户信息。 方法: usermod 参数 username 示例1:修改用户uid usermod -u 1010 test5 示例2...

wxy丶
48分钟前
1
0
synchronized锁对象的坑

今天本来写点其他东西,碰巧写了一下synchronized,没想到掉坑里面了,大佬别笑。 起初代码大概是这样的: package com.ripplechan.part_1_2_3;import java.util.concurrent.CountDownL...

RippleChan
52分钟前
1
0
XAMPP环境搭建(Apache + MariaDB + PHP + Perl)

operation system:ubuntu-18.04.1 step1:download XAMPP #sudo wget https://www.apachefriends.org/xampp-files/7.2.9/xampp-linux-x64-7.2.9-0-installer.run step2:install XAMPP #sudo ......

硅谷课堂
54分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部