【Android面试八股文】Android性能优化面试题:怎样检测函数执行是否卡顿?

文章目录

  • 卡顿
    • 一、可重现的卡顿
    • 二、不可重现的卡顿
      • 第一种方案: 基于 Looper 的监控方法
      • 第二种方案:基于 Choreographer 的监控方法
      • 第三种方案:字节码插桩方式
      • 第四种方案: 使用 JVMTI 监听函数进入与退出
      • 总结
      • 相关大厂的方案
        • ArgusAPM
        • BlockCanary
        • QQ空间卡慢组件
        • Matrix
        • 微信广研
      • 参考文档

卡顿

卡顿意味着我们的App发生了掉帧,被使用者所感知。

而导致App卡顿的原因很多:UI绘制慢、内存使用不当(内存抖动)等等情况都会导致程序出现卡顿,而这些卡顿又分为:

  • 可重现
  • 不可重现

一、可重现的卡顿

有一部分的卡顿是可本地复现的,对于这种容易重现的场景,一般我们在开发及体验测试阶段容易注意得到,而定位卡顿的根源,我们常用的方法是通过 TraceViewSystrace 工具来抓取卡顿过程中函数的执行情况(堆栈,耗时,调用次数等)。

通过 TraceView 的可视化界面,我们可以具体知道某个过程中的调用栈信息及各个函数的执行次数与耗时,能比较直观的找到严重耗时的函数,帮助我们快速解决卡顿问题。

在这里插入图片描述

目前Traceview 已弃用。如果使用 Android Studio 3.2 或更高版本,则应改为使用 CPU Profiler

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/40793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue目录说明

vue目录说明 主要目录说明 .vscode - - -vscode工具的配置文件夹 node_modules - - - vue项目的运行依赖文件夹 public - - -资源文件夹(浏览器图标) src- - -源码文件夹 .gitignore - - -git忽略文件 index.html - - -入口html文件 package.json - - -…

C++ //练习 14.37 编写一个类令其检查两个值是否相等。使用该对象及标准库算法编写程序,令其替换某个序列中具有给定值的所有实例。

C Primer(第5版) 练习 14.37 练习 14.37 编写一个类令其检查两个值是否相等。使用该对象及标准库算法编写程序,令其替换某个序列中具有给定值的所有实例。 环境:Linux Ubuntu(云服务器) 工具&#xff1a…

系统架构设计师教程(清华第2版)<第1章 绪论>解读

系统架构设计师教程 第一章 绪论 1.1 系统架构概述1.1.1 系统架构的定义及发展历程1.1.2 软件架构的常用分类及建模方法1.1.3 软件架构的应用场景1.1.4 软件架构的发展未来1.2 系统架构设计师概述1.2.1 架构设计师的定义、职责和任务1.2.2 架构设计师应具备的专业素质1.3 如何成…

上份工作不干了24年5月-6月回顾(面试+软考)需要资料的小伙伴可以关注下

前言: 博主在5月和6月基本没有对博客内容进行更新了,不是博主偷懒,5月份博主在全力准备24年系统分析师的软考,6月份在准备面试,现在对5月和6月进行回顾; 先说下软考系统分析师: 博主实在今年3月…

记录OSPF配置,建立邻居失败的过程

1.配置完ospf后,在路由表中不出现ospf相关信息 [SW2]ospf [SW2-ospf-1]are [SW2-ospf-1]area 0 [SW2-ospf-1-area-0.0.0.0]net [SW2-ospf-1-area-0.0.0.0]network 0.0.0.0 Jul 4 2024 22:11:58-08:00 SW2 DS/4/DATASYNC_CFGCHANGE:OID 1.3.6.1.4.1.2011.5.25 .1…

如何利用 SCSS 的变量和混合(Mixin)功能来创建可复用的样式组件,并确保在不同场景下的兼容性?

使用 SCSS 的变量和混合功能可以方便地创建可复用的样式组件,并确保在不同场景下的兼容性。下面是具体的步骤: 创建变量:使用 $ 符号定义变量,例如 $primary-color: #005500;。这样可以方便地在整个项目中重复使用该颜色。 创建混…

arm_uart4实验

#include "uart4.h" //UART //初始化 void hal_uart4_init() { //rcc_init //…

前端Debugger时复制的JS对象字符转JSON对象

前端debugger时,复制的对象在控制台输出时是如下格式,需要转换为对象格式来进行验证操作 bridgeId : 4118 createBy : null createTime : "2023-03-24 10:35:26" createUserId : 1 具体实现代码: // 转换transform (text) {l…

Java面向对象练习(4.文字格斗游戏)(2024.7.4)

角色类 package FightGame20240704; import java.util.Random; public class GameRole {Random r new Random();private String name;private int blood;private char gender;private String face;public GameRole(){}public GameRole(String name, int blood, char gender){…

openlayers中区域掩膜的实现

概述 在前文完成了mapboxGL中区域掩膜的实现。近日有人问到说在openlayers中如何实现,本文就带大家看看如何在openlayers中实现区域掩膜。 实现效果 实现 1. 实现思路 在地图容器中添加一个canvas,设置其在map之上;监听map的postrender事…

文华财经T9多空波段趋势量化交易策略模型源码

// 定义变量 Vars Numeric STEP1,MVALUE1,SARVAL,C; Numeric SARLINE,COND,ZBMA1,ZBMA2; Begin CCLOSE; STEP13/11; MVALUE120/22; SARVALSAR(4, STEP1, MVALUE1); PlotLine("",IIF(SARVAL>0,SARVAL,InvalidNumeric),RED,Circledot); PlotLine("&q…

AI大模型开发入门:OpenAI API的Hello World

AI大模型时代下,我们也要学点大模型知识了。 前面我们简单实现了将GPT接入微信公众号: [【超详细!】Python微信公众号开发(4)- 手把手教你接入GPT],算是已经用过一点AI的知识了,浅尝辄止。 这还…

[吃瓜教程]南瓜书第5章神经网络

1.M-P神经元 M-P神经元,全称为McCulloch-Pitts神经元,是一种数学模型,用于模拟生物神经元的功能。这个模型是由Warren McCulloch和Walter Pitts在1943年提出的。它是人工智能和计算神经科学领域中非常重要的早期模型。 M-P神经元接收n个输入…

[数据集][目标检测]轮椅检测数据集VOC+YOLO格式13826张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):13826 标注数量(xml文件个数):13826 标注数量(txt文件个数):13826 标…

java如何把list转换成map

不废话&#xff0c;直接上代码 public static void main(String[] args) {List<UserxVO> list new ArrayList<>();for (int i 0; i < 10; i) {list.add(new UserxVO("n" i, "dd" i));}Map<String, String> map list.stream().co…

类和对象-友元-成员函数做友元

成员函数做友元 #include<iostream> #include<string> using namespace std;class Building;class GoodGay { public:GoodGay();void visit(); //让visit函数可以访问Building中私有成员void visit2(); //让visit函数不可以访问Building中私有成员Building* buil…

充分发挥董事会作用,让决议落地见效

督查督办是贯彻会议决议部署、推动决策实施、促进工作落实的重要途径之一。董事会决议落实工作可以分为日常决议落实和董事会会议决策落实跟进&#xff0c;董事会的决议落实有利于加强董事会的监督作用&#xff0c;让决议战略落地生效&#xff0c;这对增强公司管理治理水平有着…

Python学习笔记28:进阶篇(十七)常见标准库使用之质量控制中的代码质量与风格第二部分

前言 本文是根据python官方教程中标准库模块的介绍&#xff0c;自己查询资料并整理&#xff0c;编写代码示例做出的学习笔记。 根据模块知识&#xff0c;一次讲解单个或者多个模块的内容。 教程链接&#xff1a;https://docs.python.org/zh-cn/3/tutorial/index.html 质量控制…

【浦语大模型开源探索】InternLM实战营第二期:技术笔记与全链路解析

本次课程链接在GitHub上&#xff1a; InternLM/Tutorial at camp2 (github.com) 第一次课程录播链接&#xff1a; 书生浦语大模型全链路开源体系_哔哩哔哩_bilibili InternLM2技术报告&#xff1a; arxiv.org/pdf/2403.17297.pdf 一、书生浦语大模型全链路开源体系笔记 Int…

TCP连接,如果server端所在机器突然掉电,client是如何以及多久感知tcp连接断开

TCP连接&#xff0c;如果server端所在机器突然掉电&#xff0c;client是如何以及多久感知tcp连接断开 文章目录 TCP连接&#xff0c;如果server端所在机器突然掉电&#xff0c;client是如何以及多久感知tcp连接断开1. 场景&#xff1a;1.1 client没有发数据给server场景1.1.1 T…