RunLoopDemos
RunLoopDemos copied to clipboard
Demo3,存在卡顿检测不出来的情况
Demo3列表快速滑动(大概一半);这时候开始渲染图片,如果马上开始滑动,会卡住大概半秒钟。FluencyMonitor并没有捕捉到这个问题,原因是主线程卡住了,而且excuting属性没有设置为YES。为什么会造成这样的现象?我的猜测是,图片在渲染绘制的时候,接收到了触摸事件,这时候runloop还没完成,但是已经对观察者kCFRunLoopAfterWaiting,而图片绘制也是在这个阶段,而且它的observer优先级设置成了最低,所以调用绘制图片的observer的时候,excuting已经设置为NO,没有捕捉到图片绘制的时间。 为了验证这一想法,我把代码改成这样:
_observer = CFRunLoopObserverCreate(kCFAllocatorDefault,
kCFRunLoopAllActivities,
YES,
LONG_MAX,
&runLoopObserverCallBack,
&context);
设置成优先级最低,测试一下,发现卡顿能检测到了。而我把优先级设置成 LONG_MAX-1则不行,应该验证了我的想法。