在同质化严重的今天, 基本上每个小领域都有众多应用提供着相似的功能,想提升留存率,给用户良好的使用体验,不断优化性能显得格外重要。
应用除了有内存占用、内存泄露、内存抖动等看不见的性能问题外,还有很多看得见的性能问题,比如进入界面慢、点击反应慢、页面卡顿等等,这些看得见的体验问题会严重影响用户使用APP的心情,但用户的情绪又无法通过异常采集、数据分析来发现,尽早优化APP的性能体验非常重要,会在一定程度上提升用户的留存率。
本文结合最近一段时间对项目中APP各界面进入速度的优化,总结一下进入界面慢的优化方案。
先从Activity的生命周期说起
应用必须在走完FirstActivity的onPause方法后才会跑SecondActivity的onCreate方法,FirstActivity的onStop和onDestory方法不会影响到进入SecondActivity的速度。因此如果我们要优化从FirstActivity跳转到SecondActivity的速度,需要从FristActivity的onPause和SecondActivity的onCreate、onStart和onResume方法入手。onStart方法通常干的事情比较少,页面之间跳转慢主要是因为在FirstActivity的onPause和SecondActivity的onCreate、onResume方法耗时导致,这个过程需要执行的操作主要有:
- 保存FirstActivity界面中的一些状态;
- 加载SecondActivity的布局;
- 初始化SecondActivity。
针对上面的分析我们可以从如下四个方面入手:
- 耗时任务异步处理;
- 布局文件优化;
- 不可见视图需要时加载;
优化实践
耗时操作异步处理
避免在上一个页面的onPause(), 下一个页面的onCreate(), onStart()和onResume()方法中执行耗时操作, 包括耗时算法。 如果必须执行耗时操作, 采用异步处理的方式执行。
使用ViewStub优化布局文件
有的界面光是加载布局就需要500ms左右,再加上界面的初始化和上一个界面的状态保存操作,页面跳转时会有严重的迟滞感。对于布局文件的优化最重要的两条是:
- 布局文件不要嵌套太深;
- 对于不需要进入界面就立即显示的视图,强烈建议使用ViewStub。
布局文件嵌套太深标示着需要更多次的布局、测量和绘制,会导致耗时更多,这个可以使用android自带的“hierarchyviewer”查看,边优化边看效果;但有时候即使布局足够扁平,加载布局文件时还是会比较耗时,因为布局文件中的视图太多了,此时对于不需要进入界面就需要显示的视图,可以使用ViewStub来延迟加载,比如加载的进度条、特定状态下出现的倒计时和动画等。
总结
性能优化是一个持续的过程,界面跳转效率只是一个性能指标,更快地跳转对于用户来说有着更好地体验,优化界面跳转速度的关键点如下:
- 关注FristActivity的onPause和SecondActivity的onCreate、onStart和onResume这4个方法中执行的代码是否有耗时操作。
- 对布局文件的优化
将优化的经验总结出来,并运用到后续的开发中。
优化APP的性能问题在一定程度上能够提高用户的留存率,是一件很有价值的事情。