文档章节

Android App界面和流畅度优化

东风玖哥
 东风玖哥
发布于 2017/04/29 17:36
字数 858
阅读 46
收藏 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
合肥
私信 提问
给学android的同学们的一些建议

我写到了想学习android的同学应该要掌握的一些java基础知识,虽然写的是基础,但是其实往往很多的学员们走上工作岗位上就会真正发现基础决定了你的上层建筑能否搭建好!今天,在这篇日志中,...

星空夜愿
2016/04/16
205
0
Android开发学习的同学们的一些建议

我写到了想学习android的同学应该要掌握的一些java基础知识,虽然写的是基础,但是其实往往很多的学员们走上工作岗位上就会真正发现基础决定了你的上层建筑能否搭建好!今天,在这篇日志中,...

浮生侃侃
2016/04/19
125
0
外媒评论:原生 Android 已死

Android M精彩亮相,众多开发者在洛杉矶见证了大量新功能:应用权限控制、充电和续航优化、内存占用优化、App与网络无缝集成、移动支付、指纹识别、Google照片应用、离线地图……很激动人心是...

oschina
2015/05/30
8.3K
44
安卓的改进,看看安卓一直怎样在速度上追赶 iOS

一直以来人们都有这样的印象,认为搭载iOS系统的iPhone一定比搭载Android系统的安卓手机流畅。潜移默化中,不少果粉甚至是普通吃瓜群众都形成了这样的思维定式:安卓就是卡、慢的代名词。然而...

局长
2017/06/15
3.7K
50
想让安卓 APP 如丝般顺滑?

随着安卓手机市场占有率的节节攀升,随便在大街上找几个人估计 80% 用的都是安卓手机吧!用安卓手机的人这么多,不知道大家是否曾经感觉到过 APP 卡顿、死机?是否遇到应用程序无响应、闪退?...

OneAPM蓝海讯通
2015/10/20
273
0

没有更多内容

加载失败,请刷新页面

加载更多

centos安装confluence全攻略

https://blog.csdn.net/qwer026/article/details/51439076

happyeveryday32
21分钟前
2
0
30 行 Javascript 代码搞定智能家居系统

本文首发于『阿里云 IoT 开发者社区』,更多精彩物联网内容欢迎前往浏览。 智能家居可谓是今年物联网的热门领域,通过智能单品和智能音箱,人们已然把『智能』两个字变成了生活的理所应当。搭...

阿里云官方博客
24分钟前
3
0
sed插入和附加文本基础使用

对于编辑器来说,在数据中增加行算是很基本的操作吧,sed有以下两个操作: 插入(insert)命令(i)会在指定行前增加一个新行 附加(append)命令(a)会在指定行后增加一个新行 还是用下面的文本来测...

woshixin
32分钟前
1
0
HIVE数据倾斜总结

在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显。主要是因为在Job完成后的所得到的Counters是整个Job的总和,优化是基于这些Counters得出的平均值,...

瑞查德-Jack
42分钟前
0
0
Pure-ftpd搭建FTP

12月11日任务 15.4 xshell使用xftp传输文件 15.5 使用pure-ftpd搭建ftp服务 使用pure-ftpd搭建FTP服务 轻量的ftp软件 安装pure-ftpd并修改配置文件 # pure-ftpd为epel扩展库里的软件[root...

robertt15
52分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部