又到周六了~~这次来谈谈性能优化吧。大家在工作中或多或少都会拿自家的应用和竞品app做比对,不可避免的需要做一些app性能优化的活。很多时候可能是策略上的调整,不过还是有非常多的通用的方式。
通常项目比较大的APP都会面临着如下性能问题,APP启动速度过慢、界面跳转较慢、用户响应事件较慢、页面滑动和动画有卡顿、界面内容展示稍慢等等,有的公司处理的很好,而有的还有很大的优化空间,对于性能优化,怎么去做,我总结了一下性能优化该如何入手。关于性能优化的内容比较多,本人会在开发中不断更新加入新内容,建议收藏方便以后查找阅读。
一般情况下,我们谈到性能优化基本上会从以下几个方面入手:
1.App启动速度优化
2.UI流畅度优化
3.内存优化
4.apk瘦身优化
5.电量优化
6.网络速度优化
还有一些特定类型app的针对性的优化,比如播放器起播速度等...
我们重点谈论上面6个方面的优化方案。
性能优化正常的流程是,发现自己app某方面与竞品差距比较大,比如UI渲染速度,需要通过某种方式去发现为什么比别人慢,往往需要利用一些工具,然后可以做一些针对性的调优(代码优化、实现方式改变等),当然了在调优的过程中会有一些通用性的调优方式可以帮助你。
所以本文从共性的角度来看,主要介绍的就是针对以上6个方面的检测工具以及调优方式了。
一、App启动速度优化
对于App启动速度优化,一般情况下我们会:
1.利用设置主题的方式去防止出现白屏或黑屏;
2.针对启动速度慢,我们需要尽可能的减少Application的onCreate中所要做的事情,比如一些不重要的SDK可以延迟加载或者异步加载;
3.多进程情况下一定要可以在onCreate中去区分进程做一些初始化工作;
4.对于部分将要使用到的类进行异步加载;
5.还有针对multidex专门做优化的(当然这个随着5.0以上的设备越来越多,影响倒是没有那么大了)。
上面这篇文章基本上描述了应用的启动方式,白屏的出现和如何优化白屏,以及一些SDK的延迟加载等等...
另外还对TraceView的使用做了一些简单的讲解。
Android使用Multidex突破64K方法数限制原理解析
Android MultiDex初次启动APP优化方案优雅的实现
这3篇可以帮助你对Multidex做一定的了解,以及提供了优化方案供参考。
关于TraceView的使用可以参考:
使用TraceView找到卡顿的元凶以及StrictMode优化代码逻辑
StrictMode比较简单,主要用来优化代码逻辑,对UI线程代码进行监控。
二、UI流畅度优化
谈到UI流畅度,一般就是不要在主进程去做耗时的操作,提升UI的绘制速度(减少View的布局层级,避免过渡绘制等)...TraceView、Lint、Hugo、StrictMode等...
这里很容易想起Google在15年初google发布了Android性能优化典范,还好视频还被我找到了,文末有下载...
对于优化方案可参考:
当然了对于UI卡顿,不可避免的要引入检测的方案:
一般有监听Looper的日志
利用Choreographer
当然也相应的有一些开源工具:
https://github.com/markzhai/AndroidPerformanceMonitor [方式1]
https://github.com/wasabeef/Takt [方式2]
https://github.com/friendlyrobotnyc/TinyDancer [方式3]
三、内存优化
内存优化那么主要就是去消除应用中的内存泄露、避免内存抖动;常用工具就是AS自带的内存检测,可以很好的发现内存抖动;leakcanary可以非常方便的帮助我们发现内存泄露;MAT可以做更多的内存分析。
当然了,你还可以了解一些内存相关的基础知识。
Android性能优化第(二)篇---Memory Monitor检测内存泄露
手把手教你在Android Studio 3.0上分析内存泄漏
四、apk瘦身优化
关于Apk瘦身,主要由以下几个方式:
利用ProGuard压缩代码去除无用资源
andresguard进一步压缩与混淆资源
第三方开源库的瘦身,仅保留自己需要的部分
极致的图片压缩与webp的使用
合理配置去除不必要的配置,仅保留中文配置等...
so的优化与配置,只保留一类so
动态下发一些资源:字库、so、换肤包等;
以上仅有7比较麻烦,需要服务端的配合,此外对于动态下发So,可以参考tinker对So热修复部分代码。
其余都是常规方式,且1 ,5,6都比较简单,build.gradle最下配置即可,当然了也有一些参考文章:
五、电量优化
电量优化说实在的关注度较低,一般情况就是合理的使用一些传感器、谨慎的使用Wake Lock、减少后台的不要的操作等...检测可以利用battery-historian
https://github.com/google/battery-historian
好了,大家可以将每个方案的所采用的实际的优化策略记录下来,对每种方式提到的工具一定要自己去体验,用起来肯定不会有多么的困难,实操起来印象会更加深刻。
性能优化并不困难,重要的还是要去实际的去操作一把,基本上也是面试常见的问题了。
最后,好文非常多,本文希望仅起到抛砖引入的效果,感谢所有作者~
想起来了16年MDCC上明云凶做过一个性能优化的分享,所以每次谈到性能优化我都能想到当年演讲的ppt。
这里提供一下该ppt的下载以及Google的性能优化典范视频,链接:https://pan.baidu.com/s/1kVHyCUb
对了,腾讯有个非常强大的手机上的“集成调测环境”,就是手机上的软件,可以用于性能检测,叫GT。