安卓性能优化之--卡顿优化

牛客高级系列专栏:

安卓

嵌入式


本人是2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业安卓开发经验,网上安卓资料千千万,笔者将继续维护专栏,一杯奶茶价格不止提供答案解析,承诺提供专栏内容免费技术答疑,直接咨询即可。助您快速掌握安卓App性能优化技巧!

正文开始⬇

内存优化是Android开发性能优化最重要的优化点之一。在中初级的面试中,面试官可能会问你是否有做过内存优化,有的话直接说出实际优化经验一定可以加分,如果没有大概率也不会再追问内存优化的理论知识。如果是大佬需要深挖性能优化,本系列文章面向中初级面试,笔者争取2023年出实际的性能优化经验,到时再一起交流。中初级的面试中,面试官可能会问:

  1. 造成系统卡顿的根本原因 ⭐⭐⭐
  2. 什么是 ANR ?导致原因有哪些?⭐⭐⭐⭐⭐
  3. 如何避免发生 ANR ?⭐⭐⭐⭐
  4. 分别说说Activity、BroadcastReceiver、Serice最长可耗时时间为多少?⭐⭐⭐⭐⭐
  5. 谈谈你项目中避免ANR的一些经验(开放题)⭐⭐
  6. 有什么方法和工具可以分析ANR ⭐⭐⭐

目录

  • 1、卡顿
    • 1.1 造成卡顿的原因
    • 1.2 CPU使用情况获取的方法
  • 2、什么是ANR
    • 2.1 Activity、BroadcastReceiver、Serice发生ANR的超时时间
    • 2.2 常见的几种可能发生ANR的情况
  • 3、改善ANR的方法
  • 4、卡顿分析的方法和工具

1、卡顿

1.1 造成卡顿的原因

造成卡顿的原因很多,如代码设计、内存占用、CPU使用率、IO操作等。这些因素造成的卡顿很难被追溯,所以发生卡顿的时候很难定位到此次卡顿的根因。

1.2 CPU使用情况获取的方法

造成卡顿因素确实很多,但无论是哪个因素,最终造成的卡顿都会反映到CPU时间上。CPU时间包含用户时间和系统时间:

  • 用户时间:执行用户态应用程序代码所消耗的时间。
  • 系统时间:执行内核态系统调用所消耗的时间,包括I/O、锁、中断和其它系统调用所消耗的时间。

那么,有什么方法可以获取CPU使用率呢?详细的介绍在本人另一篇文章:《Android系统性能监控最全面分析与实践》一文,详细介绍如何获取CPU整体使用率、每个核的使用率、占用CPU使用率最高的5个进程,这三个指标。在此,简单介绍获取CPU使用情况的方法:

  • top指令

top指令非常强大,如下图我们可以知道,系统当前有432个进程,总CPU使用率为800%,其中697%处于空闲状态,其中占用CPU使用率最高的是system_server进程,占用了23.6%的CPU。由此可见top指令可以监视系统整体和各个进程的CPU使用率,但无法获取每个核的使用率。

image.png

  • ps指令

ps(Process Status的缩写)指令是最基本同时也是非常强大的进程查看指令,可以查询系统内每个进程的运行状态、CPU使用率、占用的内存等,因为现在需要获取CPU使用率,可以执行:

ps -eo pid,%cpu,CMD --sort=-%cpu |head -n 6
指令解析:使用-o参数可自定义格式,这里只显示进程号、CPU使用率、进程名,并按CPU使用率降序排序,最后显示前5个进程。

image.png

ps指令耗时是毫秒级别,优于top指令,然而也无法获取整体或者每个核的使用率

  • dumpsys cpuinfo

Android提供的dumpsys工具可以用于查看感兴趣的系统服务信息与状态,dumpsys cpuinfo可以用来查看安卓系统当前的cpu使用情况,执行的速度是非常快的,因为其打印的内容并非执行该命令的时候临时去更新的,而是系统内部有着相关的机制会在特定情况更新cpuinfo。为方便查看下图经过裁剪,我们可以看到系统整体CPU使用率和前5个进程的使用率,还缺少每个核的使用率,因此还不是最优的方案。不过在3.3小节dumpsys cpuinfo另有他用,其实现原理也可见下文介绍。

image.png

  • 读取/proc/stat文件

读取/proc/stat文件来计算CPU使用率是目前最常见最有用的方法,Android源码获取CPU使用率也同样采用这种方法。

  • 读取/proc/[pid]/stat

该文件包含了某一个进程的所有活动信息,该文件中所有值都是从系统启动开始累计到当前时刻,可通过改文件计算每个进程的CPU使用率。

2、什么是ANR

Application Not Respongding,简称ANR,翻译为中文即是“应用程序无响应”。手机使用过程中,偶尔就会出现一个提示弹窗,说XXX软件无响应,让用户选择继续等待还是关闭软件

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

安卓性能优化讲解和实践 文章被收录于专栏

性能优化是高级工程师必备的技能,本专栏将介绍安卓App各种性能优化的方案和实践,让你轻松搞定App性能优化,成为高级工程师,本专栏包括但不限于:启动优化 -> 内存优化 -> 卡顿优化 -> 包体积优化 -> 崩溃优化 -> 耗电优化 -> 布局优化 -> 线程优化 -> 网络优化等。 (目前还在编写阶段,预计2023下半年开始发布)

全部评论

相关推荐

点赞 2 评论
分享
牛客网
牛客企业服务