谈优化一个app的思路

概要

Android性能调优在领域中是一个非常重要的手段,作者根据自己平时的工作积累,对这块进行了一个大概的整理。总的来说,做优化要有一个很好很全面的思路,这样子在对app进行优化的时候,才能够覆盖完整,将app各方面指数调到最佳,这里可以大概分为四个板块:

  • 稳定性(崩溃crash,内存溢出oom)
  • 流畅度(启动卡顿,UI滑动卡顿,页面跳转卡顿,事件相应卡顿等)
  • 损耗(耗电优化,耗流量优化)
  • apk瘦身

从以上几个板块,通过思维导图的方式呈现给大家:


image.png

1.稳定性

在android系统中,每个app分配的内存有限,如果一个app在业务逐渐积累,代码逐渐增多,越来越庞大,稍有不慎,没有考虑到内存泄漏的问题,就容易产生内存泄漏,以至于OOM。内存泄漏原理想必大家都知道,下面介绍一下分析内存泄漏的工具:

  • Memory Monitor
    android studio里面自带的profiler分析工具,打开工具可以看见较浅蓝色代表free的内存,而深色的部分代表使用的内存从内存变换的走势图变换,可以判断关于内存的使用状态,例如当内存持续增高时,可能发生内存泄漏;当内存突然减少时,可能发生GC等。当然也可以手动触发GC。
  • Memory Analyzer
    通过对hprof快照进行分析,可视化的查看内存中对象占用的大小,查看哪些对象不能被垃圾收集器回收,并可以通过视图直观地查看可能造成这种结果的对象。
  • LeakCanary
    通过在apk中简单集成,然后运行时会在手机上生成一个LeakCanary的apk,里面会对自己app中的泄漏的具体类进行分析和展示

2.流畅度

首先这里大概讲一下android的显示原理,当图形在屏幕上一帧一帧绘制的时候,如果上一帧显示和下一帧显示之间的时间间隔超过了16ms,人的肉眼就能察觉到屏幕有卡顿现象了,即手机要达到60fps的刷新率以上,用户才会觉得使用起来是流畅的。如下图,从google上面拿的一张图,很形象的演示了,CPU,GPU,缓存,显示在多个16ms的时间周期里面相互协作的关系时间图


image.png

卡顿主要来源于UI,启动,跳转,相应,从这些方面,介绍一下工具以及优化思路:

  • Profile GPU Rendering
    一个图形监测工具,能实时反应当前绘制的耗时;横轴表示时间,纵轴表示每一帧的耗时;随着时间推移,从左到右的刷新呈现;提供一个标准的耗时,如果高于标准耗时,就表示当前这一帧丢失
    Screenshot_2020-01-16-12-37-01-40.jpg
  • Systrace UI
    这是Android 4.1及之后推出的系统性能检测工具,它在SDK包的platform-tools/systrace文件夹下。保持ADB连接的情况下,我们利用Terminal打开systrace.py并生成分析数据。
    image.png

3.损耗

耗电和耗流量,这个对于用户体验来说,极为重要,在一些户外场景尤其重要。对于操作系统和设备开发商来说,耗电优化一致没有停止,去追求更长的待机时间,而对于一款应用来说,并不是可以忽略电量使用问题,特别是那些被归为“电池杀手”的应用,最终的结果是被卸载。

  • Battery Historian
    当系统组件处于活动状态时,每行显示彩色条形段,从而从电池中汲取电流。该图表并未显示该组件使用了多少电,只是该应用程序处于活动状态。图表按类别进行组织,随着时间的推移显示每个类别的栏,如图表的X轴上所示。不同颜色代表指标的不同状态:比如Screen 红色代表亮屏,白色代表关屏,具体鼠标放在最左侧的️上就会自动提示
image.png
  • Network Monitor
    显示网络的请求状态,频繁的网络请求也会造成耗电的增加,网络优化这块可以考虑通过对网络框架的优化,应用缓存等手段。
    image.png

4.apk瘦身

有可能你随随便便开发一个apk出来,大小都已经达到10多MB甚至几十MB,上百等等。要做到apk的小巧,可以从以下几个方面去考虑

  • res资源优化
    通过android lint来删除冗余的资源,资源文件最小化等;图片的话,通过9patch来优化图片
  • 代码优化
    通过良好的架构来保证没有冗余的代码;通过proguard来压缩代码
  • lib资源优化
    去掉不需要的cpu平台的lib库
  • assets资源优化
    压缩资源,排除冗余
  • proguard代码混淆
    通过代码混淆,将代码最大程度进行压缩

结束

一个合格的apk一定是要经得起各种考验的,以上的手段和思路,希望可以帮助到大家

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。