美文网首页iOS bug修复
Runloop监控卡顿

Runloop监控卡顿

作者: huoshe2019 | 来源:发表于2019-10-21 11:48 被阅读0次

一、监控卡顿的原理

1.1、原理

我们通过监听 NSRunLoop 的状态,就能够发现调用方法是否执行 时间过长,从而判断出是否会出现卡顿

1.2、监听哪两个状态

  • 睡眠前
    无法进入睡眠,肯定会影响。
    对应状态kCFRunLoopBeforeSources
  • 唤醒后
    唤醒后,一直接收消息,无法进入下一步,肯定会影响。
    对应状态kCFRunLoopAfterWaiting

1.3、代码层面

  • 创建一个 CFRunLoopObserverContext 观察者
CFRunLoopObserverContext context = {0,(__bridge void*)self,NULL,NULL};
runLoopObserver = CFRunLoopObserverCreate(kCFAllocatorDefault,kCFRunLoopAllActivities,YES,0,&runLoopObserverCallBack,&context);

  • 将创建好的观察者 runLoopObserver 添加到主线程 RunLoopcommon 模式下观察。

  • 然后,创建一个持续的子线程专门用来监控主线程的 RunLoop 状态

  • 一旦发现进入睡眠前的kCFRunLoopBeforeSources 状态,或者唤醒后的状态kCFRunLoopAfterWaiting,在设置的时间阈值内一直没有变化,即可判定为卡顿

1.4、如何获取卡顿的方法堆栈信息

  • 直接调用系统函数
    用 signal 进行错误信息的获取。

  • PLCrashReporter

相关文章

  • 常规优化技巧

    卡顿优化 添加Observer到主线程RunLoop中,通过监听RunLoop状态切换的耗时,以达到监控卡顿的目的...

  • 监控卡顿-Runloop

    1 对主线程Runloop注册一个回调函数runLoopObserverCallBack。在每次runloop的C...

  • Runloop监控卡顿

    一、监控卡顿的原理 1.1、原理 我们通过监听 NSRunLoop 的状态,就能够发现调用方法是否执行 时间过长,...

  • RunLoop 监控卡顿为什么要用kCFRunLoopBefor

    最近看了runloop应用中监控卡顿的一些博客,很多人都提到了通过kCFRunLoopBeforeSources和...

  • 利用 RunLoop 监控卡顿

    导致卡顿问题的几种原因: 复杂 UI 、图文混排的绘制量过大; 在主线程上做网络同步请求; 在主线程做大量的 IO...

  • 如何利用 RunLoop 监控 app 卡顿

    本文意义在分析如何利用runloop监控卡顿。代码可以看戴铭大佬的代码 卡顿问题的几种原因 复杂 UI 、图文混排...

  • 戴铭(iOS开发课)读书笔记:13章节-卡顿监控

    原文链接:如何利用 RunLoop 原理去监控卡顿? 前言 一个App想要提升用户体验最重要的就是 降低程序崩溃 ...

  • APM总结学习

    APM监控卡顿并上报有两种方案: 监听Runloop状态回调, 子线程ping主线程 开启do while 循环保...

  • RunLoop监控app卡顿

    本文意义在分析如何利用runloop监控卡顿。代码可以看戴铭大佬的代码 思路 首先思路就是利用CFRunloopO...

  • iOS通过runloop监控卡顿

    https://www.jianshu.com/p/ea36e0f2e7aehttp://www.tanhao.m...

网友评论

    本文标题:Runloop监控卡顿

    本文链接:https://www.haomeiwen.com/subject/jdazmctx.html