很多朋友对于CF游戏辅助网站源码分享带数据和cf辅助资源网不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
【CSDN编者按】简单来说APP卡顿,就是FPS达不到60帧率,丢帧现象,就会卡顿,但是很多时候,我们只知道丢帧了,具体为什么丢帧,却不是很清楚,那么我们要怎么监控呢?
作者|枫叶无处漂泊责编|欧阳姝黎
前言
卡顿问题,就是在主线程上无法响应用户交互的问题。如果一个App时不时地就给你卡一下,有时还长时间无响应,这时你还愿意继续用它吗?所以说,卡顿问题对App的伤害是巨大的,也是我们必须要重点解决的一个问题。
卡顿原因
现在,我们先来看一下导致卡顿问题的几种原因:
复杂UI、图文混排的绘制量过大;
在主线程上做网络同步请求;
在主线程做大量的IO操作;
运算量过大,CPU持续高占用;
死锁和主子线程抢锁。
那么,我们如何监控到什么时候会出现卡顿呢?是要监视FPS吗?
FPS是一秒显示的帧数,也就是一秒内画面变化数量。当FPS达到60,说明界面很流程,当FPS低于24,页面流畅度不是那么流畅,但是不能说卡主了。
由此可见,简单地通过监视FPS是很难确定是否会出现卡顿问题了,所以我就果断弃了通过监视FPS来监控卡顿的方案。
那么,我们到底应该使用什么方案来监控卡顿呢?
使用RunLoop来检控卡顿
对于iOS开发来说,监控卡顿就是要去找到主线程上都做了哪些事儿。我们都知道,线程的消息事件是依赖于NSRunLoop的,所以从NSRunLoop入手,就可以知道主线程上都调用了哪些方法。我们通过监听NSRunLoop的状态,就能够发现调用方法是否执行时间过长,从而判断出是否会出现卡顿。
所以,我推荐的监控卡顿的方案是:通过监控RunLoop的状态来判断是否会出现卡顿。
3.1Runloop
RunLoop是iOS开发中的一个基础概念,为了帮助你理解并用好这个对象,接下来我会先和你介绍一下它可以做哪些事儿,以及它为什么可以做成这些事儿。
RunLoop这个对象,在iOS里由CFRunLoop实现。简单来说,RunLoop是用来监听输入源,进行调度处理的。这里的输入源可以是输入设备、网络、周期性或者延迟时间、异步回调。
RunLoop会接收两种类型的输入源:
一种是来自另一个线程或者来自不同应用的异步消息;
另一种是来自预订时间或者重复间隔的同步事件。
RunLoop的目的是,当有事件要去处理时保持线程忙,当没有事件要处理时让线程进入休眠。所以,了解RunLoop原理不光能够运用到监控卡顿上,还可以提高用户的交互体验。通过将那些繁重而不紧急会大量占用CPU的任务(比如图片加载),放到空闲的RunLoop模式里执行,这样就可以避开在UITrackingRunLoopMode这个RunLoop模式时是执行。
UITrackingRunLoopMode是用户进行滚动操作时会切换到的RunLoop模式,避免在这个RunLoop模式执行繁重的CPU任务,就能避免影响用户交互操作上体验。
接下来,我就通过CFRunLoop的源码来跟你分享下RunLoop的原理吧。
3.2RunLoop原理
其内部代码整理如下:
文章分享结束,CF游戏辅助网站源码分享带数据和cf辅助资源网的答案你都知道了吗?欢迎再次光临本站哦!
