CF游戏辅助网站源码分享带数据 cf辅助资源网

很多朋友对于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辅助资源网的答案你都知道了吗?欢迎再次光临本站哦!

Published by

风君子

独自遨游何稽首 揭天掀地慰生平