前言
对 Android 应用的性能分析,我们主要考量以下指标;但是,为了深入了解具体的某个指标,以及该指标具体在安卓设备上的影响。我们将会把这些指标分成不同的文章进行论述,让大家更好更深入地理解每一个指标的具体细节。通过理论结合实际实践的情况,就能将这些理论运用到具体的开发或者测试工作当中。
- 应用的内存的使用情况
- 应用的 cpu 占用率
- 帧率
- 网络通讯效率
- 功耗
- 流量
内存
对应用的内存使用情况进行分析,通过对应用进行不同的操作,同时观察应用的内存使用情况,能帮助我们更加深入了解应用执行效率。而一个应用的内存占用过高,或者内存占用持续增高,都是这个应用存在优化或者有bug存在的可能性。
什么是内存泄漏
应用中持有对象的内存占用不断增加,或者持有的对象越来越多没有释放。都会导致内存的占用持续增高。在 Android 中,针对应用的这种行为,系统会根据应用内置内存占用最高阀值去对应用进行管理,一旦内存的占用超过阀值。系统便会强制将应用杀死,导致应用发生崩溃现象。而在内存占用持续增加的过程中,由于持有对象占用内存或者持有的对象越来越多,导致寻址效率降低,从而使应用在使用时看起来越来越迟钝,也就是我们所说的卡顿。(但卡顿不一定是在这种情况下才会发生,有时候在弱网情况下,网络速度也会导致应用在使用时看起来比较卡顿)
具体的泄漏行为
-
应用中一个对象占用的内存越来越多
一般在代码中,如果在一个集合中不断填充内容,而这些内容没有删减的时候,就会导致该对象的内存占有不断增加。一个不断变大的集合,在使用时,它的查询效率也会出现问题。低效的查询效率会在执行流程中造成越来越大的停顿时间。如果是同步过程调用,则会造成该过程等待时间过长。而如果在异步调用过程中,则会造成回调响应过慢,也就是消息传递的延迟。这些现象最终反馈到用户的体验中都是越用越慢,越用越卡。 -
应用中持有的对象越来越多
而如果应用中持有的对象越来越多,在使用体验上不会有太强烈的感受,不过这种操作,一般都发生在对音视频图像对象的操作上比较多。而对内存消耗较为严重的对象进行操作,没有及时及时释放该对象,很快就能从应用的崩溃上得到反馈。想对于单个对象持有内存持续增加,这种行为会更容易暴露。不过暴露时间还是取决与单个对象对内存的占用情况。
如何抓取内存数据
了解了内存泄漏的真正原因后,我们就得看看,如何进行想对应的测试。查看我们的被测应用是否会有上述行为。所以,现在,来讲一下如何抓取应用的内存数据。这些数据有哪些类别,具体的数据如何理解。
抓取某个时间点的内存使用情况
- 查看 android 系统上全部的内存信息
dumpsys meminfo
- 查看某个 Android 应用的内存情况
dumpsys meminfo [com.name.package]
有了以上两个指令,我们就能通过 Android 系统的内置命令 dumpsys 来查看具体的应用内存使用情况,或者全局的系统内存使用情况。不过,这里需要说明的是,这个指令的输出信息很多,而且是某个时间点的内存使用情况。
生成某个时间段内的内存使用情况
为了了解具体的应用行为,也就是具体的内存使用情况,我们必须抓取某个时间段内的内存数据,点线面,这都是数据统计的基本手段,多个时间点的内存占用数据的集合既是一个时间段内的内存使用数据。将这些数据收集起来,然后用图表的方式来展现它们。这样,一个动态的应用内存行为就展现在我们的眼前。
to continue。

本文将详细探讨Android应用中的内存使用、内存泄漏现象、如何通过`dumpsys meminfo`抓取数据,以及关键的内存泄漏案例分析。了解内存泄漏原因及检测技巧,提升应用性能和用户体验。

802

被折叠的 条评论
为什么被折叠?



