文档章节

Android App界面和流畅度优化

东风玖哥
 东风玖哥
发布于 2017/04/29 17:36
字数 858
阅读 33
收藏 1
点赞 0
评论 0

所谓界面和流畅度优化,就是尽可能多地消除用户可直接感知的、影响用户操作体验的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 HWUI硬件加速模块浅析

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

u010164190
04/27
0
0
Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)

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

Carson_Ho
05/30
0
0
实现Android手机屏幕投影到电脑进行演示

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

IT达仁
06/26
0
0
Android ListView复杂列表优化实践

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

程序袁_绪龙
2015/02/07
0
1
Android ListView复杂列表优化实践

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

叶大侠
2015/02/07
0
18
【Android游戏开发二十六】追加简述SurfaceView 与 GLSurfaceView效率!

李华明Himi 原创,转载务必在明显处注明: 转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/android-game/388.html 今天在这里大概说下现在为什么游戏引擎都趋向与openGL进行的...

迷途d书童
2012/03/19
0
0
十大技巧优化Android App性能

无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的。 那么,如何能开发出更高性能的Android App?相信是软件开发...

常翔
2014/10/30
0
1
Catnut 微博app第一个版本发布了

Catnut 微博app第一个版本发布了 很高兴的告诉大家,今天Catnut的第一个公开版本发布了,这还不是正式版,毕竟版本号还没到1.0嘛,新鲜出炉,我敢保证,肯定会有些fc啊,崩溃什么的,请大家见...

龙凯
2014/03/05
0
0
轻松时刻–在pcDuino上玩小游戏

今天我们要放松一下,用pcDuino来玩一下小游戏了。 大家都知道pcDuino是可以兼容Ubuntu和Android两种系统的。 我们给大家分享的游戏就是Android系统下完成的,相信大家也玩过Android系统的手...

pc朵拉
2013/07/02
0
0
Android P Beta 2 及终版 API 强势来袭!

在四周前的 Google I/O 开发者大会上,我们发布了Android P 的首个 Beta 版,将人工智能 (AI) 定位为操作系统的核心,并侧重于提供智能且简洁的体验。 今天,我们隆重推出 Android P Beta 2...

谷歌开发者
06/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

人工智能你必须掌握的32个算法(二)归并排序算法

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子...

木头释然
6分钟前
0
0
第十四章NFS服务搭建与配置

14.1 NFS介绍 NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netap...

Linux学习笔记
29分钟前
1
0
流利阅读笔记27-20180716待学习

生了娃照样能打,两位母亲温网会师 Lala 2018-07-16 1.今日导读 现今在生儿育女后回归事业的母亲们已经非常多见,但是很少有人想到,以高强度运动与竞争激烈为特色的竞技体育项目也会有 work...

aibinxiao
30分钟前
3
0
Guava 源码分析(Cache 原理【二阶段】)

前言 在上文「Guava 源码分析(Cache 原理)」中分析了 Guava Cache 的相关原理。 文末提到了回收机制、移除时间通知等内容,许多朋友也挺感兴趣,这次就这两个内容再来分析分析。 在开始之前...

crossoverJie
42分钟前
0
0
OSChina 周一乱弹 —— 如果是你喜欢的女同学找你借钱

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @guanglun :分享Michael Learns To Rock的单曲《Fairy Tale》 《Fairy Tale》- Michael Learns To Rock 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
今天
480
16
NNS域名系统之域名竞拍

0x00 前言 其实在官方文档中已经对域名竞拍的过程有详细的描述,感兴趣的可以移步http://doc.neons.name/zh_CN/latest/nns_protocol.html#id30 此处查阅。 我这里主要对轻钱包开发中会用到的...

暖冰
今天
0
0
32.filter表案例 nat表应用 (iptables)

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 10.15 iptables filter表案例: ~1. 写一个具体的iptables小案例,需求是把80端口、22端口、21 端口放行。但是,22端口我...

王鑫linux
今天
0
0
shell中的函数&shell中的数组&告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

影夜Linux
今天
0
0
Linux网络基础、Linux防火墙

Linux网络基础 ip addr 命令 :查看网口信息 ifconfig命令:查看网口信息,要比ip addr更明了一些 centos 7默认没安装ifconfig命令,可以使用yum install -y net-tools命令来安装。 ifconfig...

李超小牛子
今天
1
0
[机器学习]回归--Decision Tree Regression

CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值;当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很...

wangxuwei
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部