美文网首页Android 学习性能优化Android
必知必会 | Android 性能优化的方方面面都在这儿

必知必会 | Android 性能优化的方方面面都在这儿

作者: Android_Jieyao | 来源:发表于2017-11-18 09:53 被阅读866次

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


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

    1.App启动速度优化

    2.UI流畅度优化

    3.内存优化

    4.apk瘦身

    5.电量优化

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

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

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

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


    App启动速度优化

    对于App启动速度优化,一般情况下我们会利用主题去防止出现白屏;针对启动速度慢,需要尽可能减少Application的onCreate中所要做的事情,比如一些不重要的SDK延迟或者异步加载;多进程情况下一定要可以在onCreate中去区分进程做一些初始化工作;部分将要使用到的类异步加载;还有针对multidex专门做优化的(当然这个随着5.0以上的设备越来越多,影响倒是没有那么大了)。

    下面针对各个方面推荐一些文章:

    Android性能优化(一)之启动加速35%

    Android冷启动白屏解析,带你一步步分析和解决问题

    Android APP启动优化

    App启动速度优化之耗时检测处理

    上面几篇文章基本上描述了应用的启动流程,如何优化白屏,以及一些SDK的懒加载等等...

    美团Android DEX自动拆包及动态加载简介

    Android MultiDex初次启动APP优化

    其实你不知道MultiDex到底有多坑

    这3篇可以帮助你对multidex做一定的了解,以及提供了优化方案供参考。

    当然了,在检测启动优化上,除了利用adb命令去检测总时间,还有就是去发现耗时的方法,可以利用TraceView,或者打开StrictMode,如果你喜欢使用Log,还可以去使用hugo,或者自己写一个类似的AOP日志框架。

    关于TraceView的使用可以参考:

    TraceView 简介及其案例实战

    使用 TraceView 找到卡顿的元凶

    Android App优化之提升你的App启动速度之实例挑战

    StrictMode比较简单,就不描述了,hugo是Jake大神的一个开源库,主要是利用aspectJ,源码很少,也比较简单,不过使用起来还不错,直接看readme就够了,感兴趣可以看下~

    https://github.com/JakeWharton/hugo 


    UI流畅度优化

    谈到UI流畅度,一般就是不要在主进程去做耗时的操作,提升UI的绘制速度(减少View的布局层级,避免过渡绘制等)...TraceView、Lint、Hugo、StrictMode等...

    这里很容易想起Google在15年初google发布了Android性能优化典范,还好视频还被我找到了,文末有下载...

    对于优化方案可参考:

    Android性能优化(二)之布局优化面面观

    Android UI性能优化实战 识别绘制中的性能问题

    性能优化之布局优化

    Android性能调优

    当然了对于UI卡顿,不可避免的要引入检测的方案:

    一般有监听Looper的日志

    利用Choreographer

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

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

    https://github.com/markzhai/AndroidPerformanceMonitor  [方式1]

    https://github.com/wasabeef/Takt  [方式2]

    https://github.com/friendlyrobotnyc/TinyDancer  [方式3]


    内存优化

    内存优化那么主要就是去消除应用中的内存泄露、避免内存抖动;常用工具就是AS自带的内存检测,可以很好的发现内存抖动;leakcanary可以非常方便的帮助我们发现内存泄露;MAT可以做更多的内存分析。

    当然了,你还可以了解一些内存相关的基础知识。

    Android性能优化(三)之内存管理

    Android性能优化第(二)篇---Memory Monitor检测内存泄露

    内存泄露实例分析 -- Android内存优化第四弹

    Android最佳性能实践(一)——合理管理内存

    Android最佳性能实践(二)——分析内存的使用情况

    Android性能优化-内存泄漏的8个Case

    Android 内存优化总结&实践

    Android内存优化之OOM

    Android应用内存泄露分析、改善经验总结

    内存泄露从入门到精通三部曲之基础知识篇

    内存泄露从入门到精通三部曲之排查方法篇

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


    apk瘦身

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

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

    andresguard进一步压缩与混淆资源

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

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

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

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

    动态下发一些资源:字库、so、换肤包等;

    以上仅有7比较麻烦,需要服务端的配合,此外对于动态下发So,可以参考tinker对So热修复部分代码。

    其余都是常规方式,且1 ,5,6都比较简单,build.gradle最下配置即可,当然了也有一些参考文章:

    App瘦身最佳实践

    Android APP终极瘦身指南

    Android性能优化(十)之App瘦身攻略

    [Android技术专题]APK瘦身看这一篇文章就够了

    安装包立减1M--微信Android资源混淆打包工具

    爱奇艺Android移动客户端app瘦身经验

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

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

    Android IconFont全攻略


    电量优化

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

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

    Android性能优化之电量篇

    Android性能优化-电量优化

    Android性能优化系列之电量优化

    Android App优化之电池省着用

    https://github.com/google/battery-historian 

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

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

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

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

    这里提供一下该ppt的下载以及Google的性能优化典范视频,链接:https://pan.baidu.com/s/1kVHyCUb 

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

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

    相关文章

      网友评论

      • 56149aeb2cc8:性能优化是必备的技能,也是个难点,学习中
      • 请叫我四爷:哈哈,小伙子,我还以为你是写的文章。
        原来你是总结的一些合集。
        6ee72519b51d:总结得挺好的呀

      本文标题:必知必会 | Android 性能优化的方方面面都在这儿

      本文链接:https://www.haomeiwen.com/subject/dfqevxtx.html