Android:应用开发进阶必经之路之性能优化(上)

本文是Android应用性能优化的上篇,探讨了性能问题分类、优化指标、优化原则和方法,以及一些官方和第三方的性能优化工具。性能优化包括内存、功耗、流畅度等方面,通过GPU呈现模式分析、开发者选项等工具可定位和解决性能问题。文章强调性能优化的重要性,并提供了解决性能问题的思路和原则。
摘要由CSDN通过智能技术生成

前言

性能优化在一款产品的迭代过程中非常重要;程序实现了功能、还原产品原型只能保证程序能用,但如果要让用户更愿意使用,产品得好用。试想一下如果你开发的产品启动慢、页面显示需要长时间转圈加载、页面切换卡顿、黑白屏、用一会机器就发烫、耗内存、OOM、程序切换到后台后占用内存无法释放…,这些问题就像正在玩游戏时弹出提示框这类糟糕的用户体验一样让用户恼火,如果用户不得不使用你的产品,可能还会一直忍受;但如果有很多同类竞品,糟糕的用户体验会大大影响留存率。有时候产品在市场上的表现差,真不能全怪产品和运营,程序体验问题也是很大一部分原因。
但大部分产品并没有足够重视性能问题,随便打开一个应用,即使是大厂出品,也极大可能存在过渡绘制和内存泄露的问题;也有可能是开发人员意识到了程序存在性能问题,但完成迭代就够忙的了,哪有时间去做这类不能体现绩效的事情。其实在越来越重视体验,同类产品竞争越来越激烈的环境下,对于开发人员来讲,只完成迭代,把功能做完远远不够,最重要的是把产品做好,让更多人愿意使用。重视性能问题,优化产品的体验,比改几个无关痛痒的bug会有价值得多。
网上能够找到很多关于性能优化很有价值的参考资料(详见文末),包括腾讯、阿里、魅族、豌豆荚、小米、UC等知名互联网公司都做过关于APP性能优化的分享,如果你专注于应用开发,并且想做一款备受欢迎的产品,性能优化是你进阶路上必须去学习和实践的。

一、性能问题分类

除了交互、视觉、内容方面的问题外,在用户使用过程中,给用户造成烦恼的问题都可以归结为是性能问题,比如上文中列出的这些都属于性能问题,按照影响的方面不同,可以分为如下几大类:

  • 内存问题: 耗内存、OOM、程序切换到后台后占用内存无法释放(OOM会影响产品的稳定性;耗内存、内存泄露会影响整机的性能;占用内存多预示着留给其它应用的剩余内存空间小);

  • 功耗问题: 发烫(耗电);

  • 流畅度问题: 启动慢、页面显示需要长时间转圈加载、页面切换卡顿、黑白屏(卡慢崩会让人烦躁);

针对上面一系列的性能问题,谷歌官方提供了各种各样的工具来针对性的解决各个方面的问题,也有很多不错的第三方工具值得尝试:

  • 内存问题: 提供了Android Studio的静态代码检测功能、Android Monitor;第三方内存泄露分析工具Leakcanary、MAT;

  • 功耗问题: 提供了GPU呈现模式、battery-historian、Android Monitor;

  • 流畅度问题: 提供了Android Studio的静态代码检测功能、Android Monitor、HierarchyViewer、StrictMode、过渡绘制检测工具、TraceView等;

除了上面提到的这些性能优化工具外,谷歌还在Youtube上提供了一系列关于Android应用性能优化的短视频Android Performance Patterns,介绍如何优化Android各个方面的性能问题。

二、性能优化指标

性能优化的效果仅凭感觉很难衡量,一切应该看数据说话,比如流畅度优化,刷新频率每秒越接近60帧越理想,但只要每秒钟超过24帧人眼就无法辨别了,所以仅凭感觉是无法区分优化前的30帧和优化后的40帧的区别的。为了说明做性能优化有足够的价值,就有必要通过一系列指标来说明优化前后的区别。

性能指标的定义应该具有可衡量、可比较的特点,所以每项性能指标可以是数值,也可以是一份报告,比如:

  • 流畅度: FPS,即Frams per Second,一秒内的刷新帧数,越接近60帧越好;

  • 启动时间: 时间,越短越好;

  • 内存泄露: AS静态代码检测结果、MAT检测结果,内存泄露很难用数值定义,但可以通过将优化前后工具检测的结果对比得出结论。没有内存泄露最好;

  • 内存大小: 峰值,峰值越低越好;

  • 功耗: 单位时间内的掉电量,掉电量越少越好;

从上面各项性能指标的定义可以看出,性能优化效果的评估主要是通过对比得出来的,性能如何只是相对的。只要针对同一个应用的同一项指标,优化后比优化前更优,就说明优化是有效果的。

三、性能优化原则和方法

1优化原则

解决性能问题的过程中,遵循以下几个原则,有助于提高解决问题的效率:

  • 足够多的测量: 不要凭感觉去检测性能问题、评估性能优化的效果,应该保持足够多的测量,数据不会说谎。使用各种性能工具有助于快速定位问题,这比凭感觉要靠谱得多;

  • 使用低配置的设备: 同样的程序,在低端配置的设备中,相同的问题会暴露得更为明显;高配的设备很多时候会让你忽略掉性能问题;

  • 权衡利弊: 在能够保证产品稳定、按时交付的前提下去做优化,不能顾此失彼,为了性能优化导致产品迟迟不能交付;

2优化方法

性能优化的指标很多,乍看上去无从下手,但和解bug一样,只要讲方法,事情就变得迎刃而解。对于大多数问题来讲,只要遵循了解问题→定位问题→分析问题→解决问题→验证问题的思路,基本上都可以解决:

  • 了解问题: 对于性能问题来讲,这个步骤只适用于某些明显的性能问题,很多无法感知的性能问题需要通过工具定位;

  • 定位问题: 通过工具检测、分析,定位在什么地方存在性能问题;如果很难定位,可以采用排除法(屏蔽部分代码,看现象是否仍然存在,如果还存在,则说明被屏蔽的代码没有问题,这样逐渐缩小问题的范围);

  • 分析问题: 找到问题后,分析针对这个问题该如何解决,确定解决方案;

  • 解决问题: 这个没什么可说的,如果是自己无法解决的问题,借助搜索引擎,你遇到过的问题很多人都遇到过,并且极有可能已经被解决了;

  • 验证问题: 保证每一次优化都有效,没有产生新问题,保证产品的稳定;

四、性能优化工具

本文重点介绍谷歌官方提供的一系列应用性能优化工具以及值得推荐的第三方性能优化工具,这些工具主要集中在如下几个地方:

  • 开发者选项: GPU呈现模式分析、GPU过渡绘制、严格模式、应用无响应ANR等;

  • IDE中: Android Studio,比如静态代码检测工具、Memory Monitor、CPU Monitor、NetWork Monitor、GPU Monitor、Layout Inspector、Analyze APK等;

  • SDK中: sdk\tools,比如DDMS、HierarchyViewer、TraceView等;

  • 第三方性能优化工具: MAT、Leakcanary等;

1开发者选项

首先从不需要依赖任何工具,直接借助手机中的开发者选项进行应用性能检测说起。开发者选项需要进入开发者模式后才能在系统设置中显示,对于大多数设备,可以通过如下方式在手机中开启开发者选项:打开“系统设置”→点击进入“关于手机”→连续点击“版本号”选项直至提示已进入“开发者模式”,就可以在“系统设置”中看到“开发者选项了”,打开“开发者选项”,可以看到很多能够帮助开发者检测应用性能的选项:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值