IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android卡顿优化:BlockCanary源码分析 -> 正文阅读

[移动开发]Android卡顿优化:BlockCanary源码分析

背景

BlockCanary主要提供监控Android UI卡顿,定位卡顿代码的能力。
本文通过分析框架源码,学习其设计原理和架构,内容包括:

  1. BlockCanary框架设计原理
  2. UI卡顿的监控和定位
  3. Android基础:设计模式/Handler/UI绘制原理

需求分析

  1. 开发者能收到UI发生卡顿的通知。
  2. 开发者能得到发生卡顿的内存快照。
  3. 了解造成卡顿的原因,并能进行模拟测试。

关键问题

在开始准备概要设计的时候,我们可以问自己几个问题,带着问题去看源码。

1. 用户为什么会感受到卡顿?

理论上屏幕画面需要以16ms每帧的速率刷新,用户会感到流畅。
而1 6ms每帧正对应60fps。这意味着Android系统底层的UI绘制框架尽可能地保障屏幕刷新率和GPU渲染速率相同。

而影响GPU渲染速率的因素包括:

  1. 主线程被阻塞。页面绘制产生图像数据发生阻塞,导致用户还是看到的上一帧画面。所以用户会抱怨:“很卡。。。"
  2. GPU硬件性能。

为了提高GPU渲染速率,这里,作为软件工程师,我们更需关注第一个因素:主线程什么情况下会被阻塞?

2. 主线程阻塞的原因有哪些?

1. IO阻塞
2. 线程等待阻塞
3. 密集CPU计算阻塞

3. 如何监控主线程阻塞?

由于Android的UI绘制和四大组件通信是在MainThread(主线程)进行,通过主线程中的Looper.loop(),循环调度内部消息队列中的消息执行。

如果主线程阻塞,那么会导致消息队列的消息得不到执行,如“页面的跳转“的消息就会得不到立即执行,产生卡顿。

如果我们能通过在源码埋点,统计Looper中消息队列的派发每个消息的间隔时间,是否能判断主线程发生了阻塞?

4.怎么得到卡顿时系统状态信息?

假设,我们已经发现了主线程阻塞。这个时候,我们需要得到当前系统的状态来还原卡顿现场,“破案”:

  1. 当前线程堆栈。以定位方法耗时最长的代码块。
  2. CPU负载。分析CPU是否高负荷,有可能是其他进程抢占CPU导致。
  3. 内存使用量。分析是否是内存不足,GC过快,产生线程阻塞。
  4. 总线程数和线程名。线程比较占用内存,排查是否有滥用线程池,同时可以线程名定位具体哪个线程死锁,阻塞等状态。
    那么如何得到上面这些信息?

概要设计

带着上面四个关键问题,去看源码,通过调试和跟踪代码,我们可以得到BlockCanary框架的大致架构如下:
BlockCanary架构图
从上图可以看到框架分为UI层和逻辑层两个部分,用不同模块编译

详细设计

总结

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:41:20  更:2022-02-28 15:41:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 15:37:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码