安卓面经_安卓基础面全解析(30/30)之卡顿优化全解析
牛客高级系列专栏:
安卓(安卓系统开发也要掌握)
- 想通关安卓面试,请看(承诺免费售后答疑):《150道安卓高频面试题目录及答案链接》
- 想通关安卓系统面试,请看:《140道安卓系统Framework面试题目录及答案链接》
- 想进阶安卓开发,请看(承诺免费售后答疑):《Android进阶知识体系解析_15大安卓进阶必备知识点》
- 想了解安卓APP完整开发流程,请看(承诺免费售后答疑):《安卓APP完整开发流程》
- 想掌握安卓App性能优化,请看(承诺免费售后答疑):《安卓性能优化讲解和实战专栏》
- 想掌握Gradle语法和配置,制作Gradle插件,请看(承诺免费售后答疑):《安卓Gradle语法解析和实践大全》
嵌入式
- 想通关嵌入式面试,请看: 《111道嵌入式面试题目录及答案链接》
- 想多掌握几个嵌入式项目,请看:《6个嵌入式项目交流分享(附源码)》
本人是2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业安卓开发经验,该专栏整理本人对常见安卓高频开发面试题的理解;
网上安卓资料千千万,笔者将继续维护专栏,一杯奶茶价格不止提供答案解析,承诺提供专栏内容免费技术答疑,直接咨询即可。助您提高安卓面试准备效率,为您面试保驾护航!
正文开始⬇
内存优化是Android开发性能优化最重要的优化点之一。在中初级的面试中,面试官可能会问你是否有做过内存优化,有的话直接说出实际优化经验一定可以加分,如果没有大概率也不会再追问内存优化的理论知识。如果是大佬需要深挖性能优化,本系列文章面向中初级面试,笔者争取2023年出实际的性能优化经验,到时再一起交流。中初级的面试中,面试官可能会问:
- 造成系统卡顿的根本原因 ⭐⭐⭐
- 什么是 ANR ?导致原因有哪些?⭐⭐⭐⭐⭐
- 如何避免发生 ANR ?⭐⭐⭐⭐
- 分别说说Activity、BroadcastReceiver、Serice最长可耗时时间为多少?⭐⭐⭐⭐⭐
- 谈谈你项目中避免ANR的一些经验(开放题)⭐⭐
- 有什么方法和工具可以分析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使用率,但无法获取每个核的使用率。
- ps指令
ps(Process Status的缩写)指令是最基本同时也是非常强大的进程查看指令,可以查询系统内每个进程的运行状态、CPU使用率、占用的内存等,因为现在需要获取CPU使用率,可以执行:
ps -eo pid,%cpu,CMD --sort=-%cpu |head -n 6
指令解析:使用-o参数可自定义格式,这里只显示进程号、CPU使用率、进程名,并按CPU使用率降序排序,最后显示前5个进程。
ps指令耗时是毫秒级别,优于top指令,然而也无法获取整体或者每个核的使用率
- dumpsys cpuinfo
Android提供的dumpsys工具可以用于查看感兴趣的系统服务信息与状态,dumpsys cpuinfo可以用来查看安卓系统当前的cpu使用情况,执行的速度是非常快的,因为其打印的内容并非执行该命令的时候临时去更新的,而是系统内部有着相关的机制会在特定情况更新cpuinfo。为方便查看下图经过裁剪,我们可以看到系统整体CPU使用率和前5个进程的使用率,还缺少每个核的使用率,因此还不是最优的方案。不过在3.3小节dumpsys cpuinfo另有他用,其实现原理也可见下文介绍。
- 读取/proc/stat文件
读取/proc/stat文件来计算CPU使用率是目前最常见最有用的方法,Android源码获取CPU使用率也同样采用这种方法。
- 读取/proc/[pid]/stat
该文件包含了某一个进程的所有活动信息,该文件中所有值都是从系统启动开始累计到当前时刻,可通过改文件计算每个进程的CPU使用率。
2、什么是ANR
Application Not Respongding,简称ANR,翻译为中文即是“应用程序无响应”。手机
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
#提供免费售后答疑!!花一杯奶茶的钱获得安卓面试答疑服务,稳赚不赔# Android发展已经很多年,安卓资料网上千千万,本专栏免费提供专栏内容技术答疑!!私聊当天必回。在阅读过程或者其他安卓学习过程有疑问,都非常欢迎私聊交流。