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) ,两次监听都维持同一个状态,说明卡顿
我们在线,来聊聊吧
✕
您好,当前有专业客服人员在线,让我们来帮助您吧。
我们在线,来聊聊吧