app优化

本来要写文章的,后来参考这篇感觉很不错先放这里。
http://blog.lmj.wiki/2016/08/18/app-opti/app_opt/

------------------------------微信这篇写的很全但是找不到原文链接只能直接粘过来-------

又到周六了,鸿洋的不定期的周六放送又来了~~这次来谈谈性能优化吧。大家在工作中或多或少都会拿自家的应用和竞品app做比对,不可避免的需要做一些app性能优化的活。很多时候可能是策略上的调整,不过还是有非常多的通用的方式。

一般情况下,我们谈性能优化基本上会从以下几个方面:

App启动速度优化

UI流畅度优化

内存优化

apk瘦身

电量优化

还有些网络速度优化、以及特定类型app的一些针对性的优化,比如播放器起播速度等...

我们重点谈论上面5个方面。

性能优化正常的流程是,发现自己某方面与竞品差距比较大,比如UI渲染速度,需要通过某种方式去发现为什么比别人慢,往往需要利用一些工具,然后可以做一些针对性的调优(代码优化、实现方式改变等),当然了在调优的过程中会有一些通用性的调优方式可以帮助你。

所以本文从共性的角度来看,主要介绍的就是针对以上5个方面的检测工具以及调优方式了。

1
App启动速度优化

对于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

2
UI流畅度优化

谈到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

可参考我之前编写的:

Android UI性能优化 检测应用中的UI卡顿

当然也相应的有一些开源工具:

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性能优化-内存泄漏的8个Case

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

手把手教你在Android Studio 3.0上分析内存泄漏

4
apk瘦身

关于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

Android Webp 完全解析 快来缩小apk的大小吧

App优化攻略-用TextView显示图片

Android IconFont全攻略

5
电量优化

电量优化说实在的关注度较低,一般情况就是合理的使用一些传感器、谨慎的使用Wake Lock、减少后台的不要的操作等...检测可以利用battery-historian

Android性能优化(九)之不可忽视的电量

http://www.jianshu.com/p/5d83d8649c98

Android性能优化之电量篇

http://hukai.me/android-performance-battery/

Android性能优化-电量优化

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

当然本文全部内容也已经同步到了wanandroid,有需要可以关键词搜索。

又到周六了,鸿洋的不定期的周六放送又来了~~这次来谈谈性能优化吧。大家在工作中或多或少都会拿自家的应用和竞品app做比对,不可避免的需要做一些app性能优化的活。很多时候可能是策略上的调整,不过还是有非常多的通用的方式。

一般情况下,我们谈性能优化基本上会从以下几个方面:

  • App启动速度优化

  • UI流畅度优化

  • 内存优化

  • apk瘦身

  • 电量优化

还有些网络速度优化、以及特定类型app的一些针对性的优化,比如播放器起播速度等...

我们重点谈论上面5个方面。

性能优化正常的流程是,发现自己某方面与竞品差距比较大,比如UI渲染速度,需要通过某种方式去发现为什么比别人慢,往往需要利用一些工具,然后可以做一些针对性的调优(代码优化、实现方式改变等),当然了在调优的过程中会有一些通用性的调优方式可以帮助你。

所以本文从共性的角度来看,主要介绍的就是针对以上5个方面的检测工具以及调优方式了。

<section style="margin-top: 10px;margin-bottom: 10px;white-space: normal;text-align: center;padding-left: 0.5em;padding-right: 0.5em;">

<section class="" style="padding-top: 4px;padding-right: 10px;padding-bottom: 4px;border-top: 2px solid rgb(89, 195, 249);border-bottom: 2px solid rgb(89, 195, 249);display: inline-block;border-right-color: rgb(89, 195, 249);border-left-color: rgb(89, 195, 249);">

<section style="margin-top: -8px;display: inline-block;float: left;width: 60px;background-color: rgb(254, 254, 254);">

<section style="display: table;width: 60px;">

<section style="display: table-cell;line-height: 1em;">

1

</section>

</section>

</section>

App启动速度优化

</section>

</section>

对于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就够了,感兴趣可以看下~

<section style="margin-top: 10px;margin-bottom: 10px;white-space: normal;text-align: center;padding-left: 0.5em;padding-right: 0.5em;">

<section class="" style="padding-top: 4px;padding-right: 10px;padding-bottom: 4px;border-top: 2px solid rgb(89, 195, 249);border-bottom: 2px solid rgb(89, 195, 249);display: inline-block;border-right-color: rgb(89, 195, 249);border-left-color: rgb(89, 195, 249);">

<section style="margin-top: -8px;display: inline-block;float: left;width: 60px;background-color: rgb(254, 254, 254);">

<section style="display: table;width: 60px;">

<section style="display: table-cell;line-height: 1em;">

2

</section>

</section>

</section>

UI流畅度优化

</section>

</section>

谈到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卡顿,不可避免的要引入检测的方案:

  1. 一般有监听Looper的日志

  2. 利用Choreographer

可参考我之前编写的:

<section style="padding-left: 0.5em;padding-right: 0.5em;">

<section class="" powered-by="xiumi.us">

<section class="">

<section class="">

<section>

<section class="" powered-by="xiumi.us">

<section class="">

<section class="">

当然也相应的有一些开源工具:

<section style="margin-top: 10px;margin-bottom: 10px;white-space: normal;text-align: center;">

<section class="" style="padding-top: 4px;padding-right: 10px;padding-bottom: 4px;border-top: 2px solid rgb(89, 195, 249);border-bottom: 2px solid rgb(89, 195, 249);display: inline-block;border-right-color: rgb(89, 195, 249);border-left-color: rgb(89, 195, 249);">

<section style="margin-top: -8px;display: inline-block;float: left;width: 60px;background-color: rgb(254, 254, 254);">

<section style="display: table;width: 60px;">

<section style="display: table-cell;line-height: 1em;">

3

</section>

</section>

</section>

内存优化

</section>

</section>

内存优化那么主要就是去消除应用中的内存泄露、避免内存抖动;常用工具就是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

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

<section style="margin-top: 10px;margin-bottom: 10px;white-space: normal;text-align: center;">

<section class="" style="padding-top: 4px;padding-right: 10px;padding-bottom: 4px;border-top: 2px solid rgb(89, 195, 249);border-bottom: 2px solid rgb(89, 195, 249);display: inline-block;border-right-color: rgb(89, 195, 249);border-left-color: rgb(89, 195, 249);">

<section style="margin-top: -8px;display: inline-block;float: left;width: 60px;background-color: rgb(254, 254, 254);">

<section style="display: table;width: 60px;">

<section style="display: table-cell;line-height: 1em;">

4

</section>

</section>

</section>

apk瘦身

</section>

</section>

关于Apk瘦身,主要由以下几个方式:

  1. 利用ProGuard压缩代码去除无用资源

  2. andresguard进一步压缩与混淆资源

  3. 第三方开源库的瘦身,仅保留自己需要的部分

  4. 极致的图片压缩与webp的使用

  5. 合理配置去除不必要的配置,仅保留中文配置等...

  6. so的优化与配置,只保留一类so

  7. 动态下发一些资源:字库、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

<section style="margin-top: 10px;margin-bottom: 10px;white-space: normal;text-align: center;">

<section class="" style="padding-top: 4px;padding-right: 10px;padding-bottom: 4px;border-top: 2px solid rgb(89, 195, 249);border-bottom: 2px solid rgb(89, 195, 249);display: inline-block;border-right-color: rgb(89, 195, 249);border-left-color: rgb(89, 195, 249);">

<section style="margin-top: -8px;display: inline-block;float: left;width: 60px;background-color: rgb(254, 254, 254);">

<section style="display: table;width: 60px;">

<section style="display: table-cell;line-height: 1em;">

5

</section>

</section>

</section>

电量优化

</section>

</section>

电量优化说实在的关注度较低,一般情况就是合理的使用一些传感器、谨慎的使用Wake Lock、减少后台的不要的操作等...检测可以利用battery-historian

  • Android性能优化(九)之不可忽视的电量

http://www.jianshu.com/p/5d83d8649c98

  • Android性能优化之电量篇

http://hukai.me/android-performance-battery/

http://blog.csdn.net/u012124438/article/details/74617649

  • Android App优化之电池省着用

http://www.jianshu.com/p/c55ef05c0047

好了,大家可以将每个方案的所采用的实际的优化策略记录下来,对每种方式提到的工具一定要自己去体验,用起来肯定不会有多么的困难,实操起来印象会更加深刻。

性能优化并不困难,重要的还是要去实际的去操作一把,基本上也是面试常见的问题了。

最后,好文非常多,本文希望仅起到抛砖引入的效果,感谢所有作者~

想起来了16年MDCC上明云凶做过一个性能优化的分享,所以每次谈到性能优化我都能想到当年演讲的ppt。

这里提供一下该ppt的下载以及Google的性能优化典范视频,链接:

https://pan.baidu.com/s/1kVHyCUb

,懒得复制的可以公众号内回复1118即可。

对了,腾讯有个非常强大的手机上的“集成调测环境”,就是手机上的软件,可以用于性能检测,叫GT。

http://gt.tencent.com/download.html

当然本文全部内容也已经同步到了wanandroid,有需要可以关键词搜索。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容