Android收藏集Android应用开发那些事android开发技巧

Android 性能优化

2019-08-25  本文已影响0人  因为我的心

一、前言:

用android的都知道,新买的手机用过一段时间后,手机变得越来越卡了;装了一些APP后,电量用得飞快,一天基本要一充;有些APP打开半天加载不出来;有些APP进入某些页面突然闪退;还有用了一些APP,流量用得飞快,几百M的流量用了几天就没有了等等;

1. 这是什么原因呢?

2. 那我们又得如何处理这样的问题呢?

那就是今天我们要说的APP性能优化,开发人员开发出来的app要性能好,用户体验好,性能好的APP总结一下,有如下几点:

二、流畅-卡顿优化

1. Android 应用启动慢,使用时经常卡顿,是非常影响用户体验的,应该尽量避免出现。总的来说造成卡顿的原因有如下几种:

2. andriod的渲染机制

要在屏幕上显示,其实要经过一系列的过程,Android 应用程序把经过测量、布局、绘制后的 surface 缓存数据,通过 SurfaceFlinger 把数据渲染到显示屏幕上, 通过 Android 的刷新机制来刷新数据。也就是说应用层负责绘制,系统层负责渲染,通过进程间通信把应用层需要绘制的数据传递到系统层服务,系统层服务通过刷新机制把数据更新到屏幕上。

这里我们先介绍一个名词:FPS。FPS 表示每秒传递的帧数。在理想情况下,60 FPS 就感觉不到卡,这意味着每个绘制时长应该在16 ms 以内。但是 Android 系统很有可能无法及时完成那些复杂的页面渲染操作。Android 系统每隔 16ms 发出 VSYNC 信号,触发对 UI 进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需的 60FPS。如果某个操作花费的时间是 24ms ,系统在得到 VSYNC 信号时就无法正常进行正常渲染,这样就发生了丢帧现象。那么用户在 32ms 内看到的会是同一帧画面,这种现象在执行动画或滑动列表比较常见,还有可能是你的 Layout 太过复杂,层叠太多的绘制单元,无法在 16ms 完成渲染,最终引起刷新不及时。

android的View的绘制流程大家应该都知道,都是要经过三大核心步骤:Measure、Layout、Draw。具体是如何实现的建议看一下View的源码,这里我就不多说了;如果绘制的层级深,页面复杂,在Measure、Layout这二个步骤要花费大量的时间;这样也会造卡顿现象;

3. andriod卡顿优化方案

4. andriod卡顿优化所用到的工具

性能问题并不容易复现,也不好定位,但是真的碰到问题就需要借助相应的的调试工具,下面介绍比较常用的调试工具。

三、耗损低 -耗电优化

在移动设备中,电池的重要性不言而喻,没有电什么都干不成。

1. 优化方案:

2. andriod耗电分析所用到的工具

在 Android5.0 以前,在应用中测试电量消耗比较麻烦,也不准确,5.0 之后专门引入了一个获取设备上电量消耗信息的 API:Battery Historian。Battery Historian 是一款由 Google 提供的 Android 系统电量分析工具,是一款图形化数据分析工具,直观地展示出手机的电量消耗过程,通过输入电量分析文件,显示消耗情况,最后提供一些可供参考电量优化的方法。

Battery Historian耗电分析工具
[图片上传失败...(image-4ecfd5-1566722662631)]

Battery Historian耗电分析工具的开源地址;

四、安装包-优化

随着功能不断增加,APP的包肯定不会断的变大,但应用的安装包越大,用户下载的门槛越高,特别是在移动网络情况下,用户在下载应用时,对安装包大小的要求更高,因此,减小安装包大小可以让更多用户愿意下载和体验产品。所以,我们还是要想办法去如何去优化,尽量减小app的安排包。

1. res资源优化

(1)只使用一套图片,使用高分辨率的图片。
(2)UI设计在ps安装TinyPNG插件,对图片进行无损压缩。
(3)svg图片:一些图片的描述,牺牲CPU的计算能力的,节省空间。使用的原则:简单的图标。
(4)图片使用WebP(https://developers.google.com/speed/webp/)的格式(Facebook、腾讯、淘宝在用。)缺点:加载相比于PNG要慢很多。 但是配置比较高。工具:http://isparta.github.io/
(5)使用tintcolor(android - Change drawable color programmatically)实现按钮反选效果。

2. 代码优化

(1)实现功能模块的逻辑简化
(2)Lint工具检查无用文件将无用的资源列在“UnusedResources: Unused resources”,删除。
(3)移除无用的依赖库。

3. lib资源优化

(1)动态下载的资源。
(2)一些模块的插件化动态添加。
(3)so文件的剪裁和压缩。

4. assets资源优化

(1)音频文件最好使用有损压缩的格式,比如采用opus、mp3等格式,但是最好不要使用无损压缩的音乐格式
(2)对ttf字体文件压缩,可以采用FontCreator工具只提取出你需要的文字。比如在做日期显示时,其实只需要数字字体,但是使用原有的字体库可能需要10MB大小,如果只是把你需要的字体提取出来生成的字体文件只有10KB

5. 代码混淆。

使用proGuard 代码混淆器工具,它包括压缩、优化、混淆等功能。

6. 7z极限压缩

具体请参考微信的安接包压缩,实现实现原理,有时间再分析;

五、稳定-内存优化

在 Android 系统中有个垃圾内存回收机制,在虚拟机层自动分配和释放内存,因此不需要在代码中分配和释放某一块内存,从应用层面上不容易出现内存泄漏和内存溢出等问题,但是需要内存管理。

除此之外,部分 Android 应用开发人员在开发过程中并没有特别关注内存的合理使用,也没有在内存方面做太多的优化,当应用程序同时运行越来越多的任务,加上越来越复杂的业务需求时,完全依赖 Android 的内存管理机制就会导致一系列性能问题逐渐呈现,对应用的稳定性和性能带来不可忽视的影响,因此,解决内存问题和合理优化内存是非常有必要的。

在开发的过程,如果方法不当的话,很容易造成内存泄漏,接下来,来说一下哪些情景容易出现内存泄漏。

1. 内存泄漏出现的情景

2. 内存优化的方案

3. 内存分析工具

做内存优化前,需要了解当前应用的内存使用现状,通过现状去分析哪些数据类型有问题,各种类型的分布情况如何,以及在发现问题后如何发现是哪些具体对象导致的,这就需要相关工具来帮助我们。以下介绍几种内存分析工具

(1) 显示可用和已用内存,并且以时间为维度实时反应内存分配和回收情况。
(2) 快速判断应用程序的运行缓慢是否由于过度的内存回收导致。
(3) 快速判断应用是否由于内存不足导致程序崩溃。

4. 稳定性优化

Android 应用的稳定性定义很宽泛,影响稳定性的原因很多,比如内存使用不合理、代码异常场景考虑不周全、代码逻辑不合理等,都会对应用的稳定性造成影响。其中最常见的两个场景是:Crash 和 ANR,这两个错误将会使得程序无法使用,比较常用的解决方式如下:

六、总结:

其实app性能优化,不是一二天可以完成的,主要是要开发的过程,不断的提前代码的质量,开发人员提高自己的开发水平,发现了问题,就要及时的解决。


参考作者:android的那点事
链接:https://www.jianshu.com/p/d71b51a0e29f

上一篇 下一篇

猜你喜欢

热点阅读