1.BlockCanary卡顿监控原理
创始人
2024-04-08 02:18:51
0

1.BlockCanary卡顿监控原理

内存监控也能够帮助我们定位到卡顿问题,卡顿的原因有哪些?掉帧 主线程阻塞  ui繁重慢了只是照成卡顿的原因之一 ,并不是只有ui的绘制才会导致卡顿问题,我们的 内存抖动也会照成卡顿 并发锁的竞争也会照成卡顿问题 

 频繁的io操作也会照成卡顿现象

Shared Preference的使用不当也会导致程序出现卡顿 原理是什么?

卡顿监控:

问原理源码 

 

 

 

 

 

 我们程序启动就是靠我们的main方法启动的

 ApplicationThread 继承stub 

aidl 会生成两个类一个是stub 一个是 Proxy Proxy代表了stub的一个代理

ams 持有了应用进程的ApplicationThread 他的代理类Proxy,然后ams使用Proxy去执行我们的stub方法,其实是通过代理类 执行我们的stub方法 也就执行到ApplicationThread 说白了,ams回去执行ApplicationThread里面的方法,那么其中有一个方法叫scheduletaunchactivity SChedueAUICTwActdVity 会调用sendmessage 其实就是发了一个Handler Message 消息 去把我们的activity启动起来,执行activity的oncreate方法 不要求记这个流程 要把这个流程表背下来,只需要知道Android当中的应用里面的 无论是activity的声明周期,还是fragment的生命周期 还是Application的启动,他最终都是通过发一个Handler消息 然后在Handler里面去把我们的这些生命周期的方法去调用起来  写的这些代码都是通过Handler消息,最终都是我们的一个一个的message执行起来的

api 30里设有launch activity msg了 


 

android的api28之后发生了重构 方法名字变了,但最终仍然使用Handler的消息 驱动起来的 代码都是在message处理的时候, 处理message的时候一个一个执行起来的  代码都是通过Handler驱动起来的,这个Handler就是在ActiwityThresd.java 有个H 这个H就是我们的Handler

 

Handler的执行消息是怎么执行的?Handler跟他相关的有Message Messagequeue 

Messagequeue 就是队列  我们一个一个的Message 都在里面 一个一个排队执行的,然后要通过Looper去在Messagequeue当中 去把一个一个消息取出来,然后交给dispatchMessag进行一个分发 最终执行我们的handleMesSag

Looper可以看作一个消息的传递

 Looper方法里面,去从MessageQueue去取消息 他是一个死循环

 把这个MessageQueue取出Message,然后把这个Message进行dispatchMessage去进行执行

 在执行这个消息之前比如这个消息封装的是activity的oncreate方法 在执行oncreate之前,他会去做 他把Message从MessageQueue取出来之后,他要去调用一个Printer的println的方法 会传一个Dispatching to 这样的字符串 给到我们的Printer  在真正执行消息之后 他就又会使用这个logg发一个Finished to  我们可以设置一个自己的Printer 给到我们的looper 给到我们的MessageQueue 然后我们就可以在我们自己的
 

我们只需要判断,如果说 这个println方法执行,然后看他发过来的字符串的内容,如果是以Dispatching to开头的我们就去记录一个当前的时间 然后在接到Finished to 方法 我们也去记录一下当前时间,然后将这两个时间相减我们就得到 193 msg oncreate的方法 执行的耗时

Looper方案

 这就是 (BlockCanary)实现原理,借助的就是handler looper 它可以让我们监控到每一次将dispatchMessage 每一次这个消息执行的耗时,我们的 oncreate方法 点击事件执行的方法 都能够通过looper机制 监听到他的耗时时间

我们的阈值设置为5s,如果两个时差超过了5秒 认为程序出现了卡顿 这时候我们可以利用

Thread#getStackTrace的接口来拿到我们当前卡顿的时候 我们的方法 我们的程序正在执行哪些方法。这就是捕获我们卡顿的时候执行的堆栈信息,从而去分析我们卡顿问题的原因 

 除了(BlockCanary使用handler机制以外,(ArgusAPM支持360的,LogMonitor)依赖的Choreographer编舞者模块

 

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...