• Geek_a03ab1
    2019-04-09
    为什么监控 kCFRunLoopBeforeSources、kCFRunLoopAfterWaiting这两个事件就能判断出卡顿呢?为什么不是kCFRunLoopBeforeWaiting、kCFRunLoopAfterWaiting这两个事件呢?没想明白,老师能展开说下吗?
     3
     25
  • WeZZard
    2019-04-10
    單純監控 FPS 確實不行,因為很多卡頓其實是 FPS 變化率的大幅變化(既 FPS 一階導數的波動)所造成的。

    比如說點 A 花一秒匀速位移至點 B,秒間平均幀率 60FPS,但是前 59/60 秒才跑了一幀出來,剩下 59 幀都在後 1/60 秒跑出來,那麼用戶必然看到的是點 A 花了 59/60 秒停在 A + ((B - A)/60) 這個位置上,然後突然「飛」到了 B 點上。

    所以監控 FPS > 24 的同時還要監控 FPS 變化率的波動。而這個波動的成因其實就是主線程上計算任務的性能衝擊。
    展开
    
     12
  • Keep-Moving
    2019-04-09
    PLCrashReporter怎么和卡顿检测结合起来呢?我理解它是收集崩溃信息的,但卡顿又不是一定会崩溃

    作者回复: 卡顿后收集造成卡顿的原因

     1
     11
  • 鼠辈
    2019-04-09
    这个3秒是不是太长了,1秒60帧,每帧16.67ms。runlooo会在每次sleep之前去刷新ui,这样的话如果掉了30帧,就是500ms左右,用户的体验就已经下去了,能感觉到卡顿了.
    
     9
  • 金阳
    2019-07-31
    https://blog.ibireme.com/2015/05/18/runloop/ 这篇文章讲的更清晰些
    
     6
  • Geek
    2019-04-11
    卡顿的原因讲的可以,但是讲的RunLoop让我听的头大,有几个疑问请教老师,
    1,线程与run loop是什么关系。
    2,mach_port是什么,第一次进入runloop,也是mach_port触发的吗,
    3.进入休眠状态的runloop为什么要等mach_port.
    4,系统会有多个runloop吗,不同runloop之间是串行还是并行执行的?
     2
     4
  • 董仕卿
    2019-05-05
    你这不是在讲runloop的源码嘛
    
     3
  • 戒惜舍得
    2019-04-09
    大神 可否来一篇TDD oc 和swift 希望都有
    
     2
  • 天涯
    2019-04-24
    runloop监听kCFRunLoopBeforeSources做ui刷新,为什么还需要监听kCFRunLoopAfterWaiting来判定卡顿
     1
     1
  • Geek__b82782469097
    2019-04-22
    请问swift是如何检测卡顿的呢?也是runloop么?
    
     1
  • Wechat Team
    2019-04-10
    文章提到可以『直接调用系统函数』来获取堆栈,但是通过注册那几个信号的方式获取堆栈,一般不是在闪退的情况下才可以触发回调吗?
    请老师指点

    作者回复: 获取堆栈的方法任何时候都可以调的。闪退只是一个时机

    
     1
  • 庞佳星
    2019-04-10
    老大,啥时候讲讲,resct native 和iOS的关系。谢谢啦,

    作者回复: 后面会专门说

    
     1
  • 鹏哥
    2019-04-09
    老师,请问下,如果我在用户滑动界面的时候不去加载图片,等停止滑动的时候再去加载图片,这个场景用runloop或者scrollview的代理来实现,和使用sdwebimage异步下载图片有什么区别,这几种方式貌似都没有影响用户滑动体验!

    作者回复: 图片少感觉不出,当图片大、列表长、快速滚动时会有区别

    
     1
  • 昔年
    2020-02-08
    long semaphoreWait = dispatch_semaphore_wait(dispatchSemaphore, dispatch_time(DISPATCH_TIME_NOW, 3 * NSEC_PER_SEC)); 初始化了一个信号量为0,dispatch_semaphore_wait 肯定会阻塞,不太理解这个地方的逻辑?大家帮我梳理下
    
    
  • 小宇
    2019-12-26
    为什么监控 kCFRunLoopBeforeSources、kCFRunLoopAfterWaiting这两个事件就能判断出卡顿呢?kCFRunLoopBeforeWaiting不是也做一些UI的刷新吗,这个时间过长不也是会造成卡顿吗
    
    
  • hw20101101
    2019-12-04
    请问 DecoupleDemo 允许之后,以下句话是在哪里打印的?

    [UIWorkIntervalTiming] workIntervalStart: startTimestamp > targetTimestamp; rolling forward by 0.250000

    而且 DecoupleDemo 中并没有打印 卡顿的方法堆栈信息啊
    展开
    
    
  • Donovan Mitchell S...
    2019-11-26
    老师请问方法调用死循环可以用这个原理来监控吗?试了一下一旦子线程是有间隔地去监控的话就会被死循环给打断
    
    
  • 吃土豆的Panda ...
    2019-11-11
    怎么区分是ui操作,还是io操作,还是计算呢?如果不区分是不是信息数据很难维护,很难排查问题?
    
    
  • Master
    2019-11-04
    开启子线程监控那段代码看不懂:
    1、为什么只有 wait 没有 signal 这样的结果不就是 wait 返回结果一直不为 0;
    2、为什么是 while 死循环,每次监听回调都有一个死循环,n 次监听回调过来是否同时有 n 个死循环在检测;
    3、activity 为什么非得是那两个( kCFRunLoopBeforeSources、kCFRunLoopAfterWaiting);
    3、
    
    
  • 矮个子先生😝
    2019-10-29
    老师,看git上的代码,在监控回调里,有个if (++timeoutCount < 3)这个被注掉了,我想本来是需要的吧,但我改成 if (++timeoutCount < 2) ,两次监听都维持同一个状态,说明卡顿
    
    
我们在线,来聊聊吧