Android 性能优化的方面方面都在这儿
又到周六了,鸿洋的不定期的周六放送又来了~~这次来谈谈性能优化吧。大家在工作中或多或少都会拿自家的应用和竞品app做比对,不可避免的需要做一些app性能优化的活。很多时候可能是策略上的调整,不过还是有非常多的通用的方式。
一般情况下,我们谈性能优化基本上会从以下几个方面:
- App启动速度优化 
- UI流畅度优化 
- 内存优化 
- apk瘦身 
- 电量优化 
还有些网络速度优化、以及特定类型app的一些针对性的优化,比如播放器起播速度等...
我们重点谈论上面5个方面。
性能优化正常的流程是,发现自己某方面与竞品差距比较大,比如UI渲染速度,需要通过某种方式去发现为什么比别人慢,往往需要利用一些工具,然后可以做一些针对性的调优(代码优化、实现方式改变等),当然了在调优的过程中会有一些通用性的调优方式可以帮助你。
所以本文从共性的角度来看,主要介绍的就是针对以上5个方面的检测工具以及调优方式了。
1App启动速度优化
对于App启动速度优化,一般情况下我们会利用主题去防止出现白屏;针对启动速度慢,需要尽可能减少Application的onCreate中所要做的事情,比如一些不重要的SDK延迟或者异步加载;多进程情况下一定要可以在onCreate中去区分进程做一些初始化工作;部分将要使用到的类异步加载;还有针对multidex专门做优化的(当然这个随着5.0以上的设备越来越多,影响倒是没有那么大了)。
下面针对各个方面推荐一些文章:
- Android性能优化(一)之启动加速35% 
http://www.jianshu.com/p/f5514b1a826c
- Android冷启动白屏解析,带你一步步分析和解决问题 
http://blog.csdn.net/guolin_blog/article/details/51019856
- Android APP启动优化 
http://wuxiaolong.me/2017/03/13/appStart/
- App启动速度优化之耗时检测处理 
http://www.jianshu.com/p/a0e242d57360
上面几篇文章基本上描述了应用的启动流程,如何优化白屏,以及一些SDK的懒加载等等...
- 美团Android DEX自动拆包及动态加载简介 
https://tech.meituan.com/mt-android-auto-split-dex.html
- Android MultiDex初次启动APP优化 
http://blog.csdn.net/synaric/article/details/53540760
- 其实你不知道MultiDex到底有多坑 
http://t.cn/RjjhD95
这3篇可以帮助你对multidex做一定的了解,以及提供了优化方案供参考。
当然了,在检测启动优化上,除了利用adb命令去检测总时间,还有就是去发现耗时的方法,可以利用TraceView,或者打开StrictMode,如果你喜欢使用Log,还可以去使用hugo,或者自己写一个类似的AOP日志框架。
关于TraceView的使用可以参考:
- TraceView 简介及其案例实战 
https://www.cnblogs.com/sunzn/p/3192231.html
- 使用 TraceView 找到卡顿的元凶 
http://blog.csdn.net/u011240877/article/details/54347396
- Android App优化之提升你的App启动速度之实例挑战 
http://www.jianshu.com/p/4f10c9a10ac9
StrictMode比较简单,就不描述了,hugo是Jake大神的一个开源库,主要是利用aspectJ,源码很少,也比较简单,不过使用起来还不错,直接看readme就够了,感兴趣可以看下~
- https://github.com/JakeWharton/hugo 
2UI流畅度优化
谈到UI流畅度,一般就是不要在主进程去做耗时的操作,提升UI的绘制速度(减少View的布局层级,避免过渡绘制等)...TraceView、Lint、Hugo、StrictMode等...
这里很容易想起Google在15年初google发布了Android性能优化典范,还好视频还被我找到了,文末有下载...
对于优化方案可参考:
- Android性能优化(二)之布局优化面面观 
http://www.jianshu.com/p/4f44a178c547
- Android UI性能优化实战 识别绘制中的性能问题 
http://blog.csdn.net/lmj623565791/article/details/45556391/
- 性能优化之布局优化 
http://www.trinea.cn/android/layout-performance/
- Android性能调优 
http://www.trinea.cn/android/android-performance-demo/
当然了对于UI卡顿,不可避免的要引入检测的方案:
- 一般有监听Looper的日志 
- 利用Choreographer 
可参考我之前编写的:
当然也相应的有一些开源工具:
- https://github.com/markzhai/AndroidPerformanceMonitor [方式1] 
- https://github.com/wasabeef/Takt [方式2] 
- https://github.com/friendlyrobotnyc/TinyDancer [方式2] 
3内存优化
内存优化那么主要就是去消除应用中的内存泄露、避免内存抖动;常用工具就是AS自带的内存检测,可以很好的发现内存抖动;leakcanary可以非常方便的帮助我们发现内存泄露;MAT可以做更多的内存分析。
当然了,你还可以了解一些内存相关的基础知识。
- Android性能优化(三)之内存管理 
http://www.jianshu.com/p/c4b283848970
- Android性能优化第(二)篇---Memory Monitor检测内存泄露 
http://www.jianshu.com/p/ef9081050f5c
- 内存泄露实例分析 -- Android内存优化第四弹 
http://www.jianshu.com/p/cbe2ee08ca02
- Android最佳性能实践(一)——合理管理内存 
http://blog.csdn.net/guolin_blog/article/details/42238627
- Android最佳性能实践(二)——分析内存的使用情况 
http://blog.csdn.net/guolin_blog/article/details/42238633
- Android 内存优化总结&实践 
https://mp.weixin.qq.com/s/2MsEAR9pQfMr1Sfs7cPdWQ
- Android内存优化之OOM 
http://hukai.me/android-performance-oom/
- Android应用内存泄露分析、改善经验总结 
https://zhuanlan.zhihu.com/p/20831913
- 内存泄露从入门到精通三部曲之基础知识篇 
http://dev.qq.com/topic/59152c9029d8be2a14b64dae
- 内存泄露从入门到精通三部曲之排查方法篇 
http://dev.qq.com/topic/591522d9142eee2b6b9735a2
4apk瘦身
关于Apk瘦身,主要由以下几个方式:
- 利用ProGuard压缩代码去除无用资源 
- andresguard进一步压缩与混淆资源 
- 第三方开源库的瘦身,仅保留自己需要的部分 
- 极致的图片压缩与webp的使用 
- 合理配置去除不必要的配置,仅保留中文配置等... 
- so的优化与配置,只保留一类so 
- 动态下发一些资源:字库、so、换肤包等; 
以上仅有7比较麻烦,需要服务端的配合,此外对于动态下发So,可以参考tinker对So热修复部分代码。
其余都是常规方式,且1 ,5,6都比较简单,build.gradle最下配置即可,当然了也有一些参考文章:
- App瘦身最佳实践 
http://www.jianshu.com/p/8f14679809b3#
- Android APP终极瘦身指南 
http://t.cn/RGjNpam
- Android性能优化(十)之App瘦身攻略 
http://www.jianshu.com/p/99f3c09982d4
- [Android技术专题]APK瘦身看这一篇文章就够了 
http://www.jianshu.com/p/6be4f98162d7
- 安装包立减1M--微信Android资源混淆打包工具 
http://t.cn/RjjVe4f
- 爱奇艺Android移动客户端app瘦身经验 
http://t.cn/RjjfzrY
5电量优化
电量优化说实在的关注度较低,一般情况就是合理的使用一些传感器、谨慎的使用Wake Lock、减少后台的不要的操作等...检测可以利用battery-historian
- Android性能优化(九)之不可忽视的电量 
http://www.jianshu.com/p/5d83d8649c98
- Android性能优化之电量篇 
http://hukai.me/android-performance-battery/
- Android性能优化系列之电量优化 
http://blog.csdn.net/u012124438/article/details/74617649
- Android App优化之电池省着用 
http://www.jianshu.com/p/c55ef05c0047
- https://github.com/google/battery-historian 
好了,大家可以将每个方案的所采用的实际的优化策略记录下来,对每种方式提到的工具一定要自己去体验,用起来肯定不会有多么的困难,实操起来印象会更加深刻。
性能优化并不困难,重要的还是要去实际的去操作一把,基本上也是面试常见的问题了。
最后,好文非常多,本文希望仅起到抛砖引入的效果,感谢所有作者~
想起来了16年MDCC上明云凶做过一个性能优化的分享,所以每次谈到性能优化我都能想到当年演讲的ppt。
这里提供一下该ppt的下载以及Google的性能优化典范视频,链接:https://pan.baidu.com/s/1kVHyCUb,懒得复制的可以公众号内回复1118即可。
对了,腾讯有个非常强大的手机上的“集成调测环境”,就是手机上的软件,可以用于性能检测,叫GT。
http://gt.tencent.com/download.html
Android 性能优化的方面方面都在这儿的更多相关文章
- 【腾讯Bugly干货分享】Android性能优化典范——第6季
		本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/580d91208d80e49771f0a07c 导语 这里是Android性能优 ... 
- android 性能优化
		本章介绍android高级开发中,对于性能方面的处理.主要包括电量,视图,内存三个性能方面的知识点. 1.视图性能 (1)Overdraw简介 Overdraw就是过度绘制,是指在一帧的时间内(16. ... 
- Android性能优化典范第一季
		2015年伊始,Google发布了关于Android性能优化典范的专题,一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有关 ... 
- [转]Android性能优化典范
		2015年伊始,Google发布了关于Android性能优化典范的专题,一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有关 ... 
- [Android Pro]   Android性能优化典范第一季
		reference to : http://www.cnblogs.com/hanyonglu/p/4244035.html#undefined 2015年伊始,Google发布了关于Android性 ... 
- Android性能优化(一)
		Android性能优化典范 1.大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能. 从设计师的角度,他们希望App能够有更多的动画,图片等时尚元素来实现流畅的用户体验. 但是Android ... 
- Android优化—— Google 发布 Android 性能优化典范
		阅读目录 0)Render Performance 1)Understanding Overdraw 2)Understanding VSYNC 3)Tool:Profile GPU Renderin ... 
- Android性能优化典范(转)
		转载自oschina. 2015年伊始,Google发布了关于Android性能优化典范的专题, 一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍 ... 
- Android性能优化典范(二)
		Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitmap的 ... 
随机推荐
- allure报告定制(pytest+jenkins)
			环境及安装可查看 pytest+jenkins安装+allure导出报告 要让allure报告更漂亮,更直观,需要在脚本中写入allure特性 一开始allure调用step().story().fe ... 
- Django中的Cookie--实现登录
			Django中的Cookie--实现登录 Django Cookie Cookie Cookie 是什么 保存在浏览器端的键值对,让服务器提取有用的信息. 为什么要有 Cookie 因为HTTP请求 ... 
- C#效率提升总结
			1. 尽量减少装箱 尽量减少字符串之间拼接 优先用StringBuilder,因为不会多次分配内存 String.Format()内部其实是调用了StringBuilder(),所以效率很高 2. 转 ... 
- 快速排序分析及实现(C++)
			目录 快速排序算法分析及实现(C++) 算法思想 快速排序步骤 优点分析 C++语言实现 快速排序算法分析及实现(C++) 算法思想  把n个元素划分为三段:左端Left,中间段middle和右端r ... 
- java多线程---------java.util.concurrent并发包----------等待多线程完成
			一.等待多线程完成的join的使用.CoundownLantch.CyclicBarrier . 
- Code First配合Entity Framework Power Tools Beta 4使用
			基于现有数据库生成POCO数据类和数据库上下文需要借助Visual Studio一个扩展插件-- Entity Framework Power Tools(一个Code First反向工程工具).只要 ... 
- openvpn应用场景案例【转】
			转载至:http://www.linuxfly.org/post/86/ 一.案例1 针对不同的客户端指定不同的等级和权限.通常的方法是:1.每个客户端分配不同的IP地址:2.利用防火墙对不同的IP地 ... 
- 四、cent OS安装配置mysql
			下载mysql的repo源wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 安装mysql-community-r ... 
- Apache Rewrite的主要功能
			#Apache Rewrite的主要功能 #就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范.#平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等 在httpd.conf中去掉下 ... 
- kinect 深度图像去噪算法
			算法设计思路 (1)读取16位深度图像到待处理图像帧组: (2)ROI区域计算 由于kinect 彩色摄像头和红外深度摄像头是存在视角偏差的,经过视角对齐后,得到的深度图像是有黑边的.此处通过取帧组第 ... 
