iOS push 页面 跳转卡顿 延时 3秒 加载xib卡顿

Bug现象1

在项目中,在iOS9上 从VC1 pushVC2会卡顿3-5秒,
VC1 pushVC3 不会卡顿。


Time Profiler检测,发现push VC2页面,主线程会卡顿。
但是因为它的检测显示:调用的都是系统的方法,没有我原生的代码,不会分析,所以也就作罢了。

网上答案

网上的分析大致有两种
1,是这个延迟 卡顿 是iOS7那个经典的背景色问题,修改背景颜色为白色就行了。
我换了颜色,发现并没有任何作用。


2,是新的页面请求数据太多,需要放到异步线程中。
其实新页面的数据处理我都在异步线程中,打印Log发现,卡完3秒以后,这些Log才打印。对我来说无用。

解决方案

在一篇文章中找到了线索,可能是字体的原因。
于是查找Xib中加载的所有字体,发现有一个Label用了一个非系统字体。

iOS push 页面 跳转卡顿 延时 3秒 加载xib卡顿_第1张图片
需要修改成系统字体

修改成系统字体以后,效果太明显了,一下子从卡顿将近5秒变成了1秒

原因分析

1,导航控制器push新页面的时候,其实是把新页面的东西都加载好了以后才真正push的,
这个时候viewDidLoad viewWillAppear 都已经调用完成了。


2,可能是非系统字体初次使用的时候会进行懒加载吧,如果这个字体在项目中本来就没有内置,那卡的就会很严重。

后续相关:Bug现象2

在项目中,在iOS9上 从VC1 pushVC2 , VC2用到了讯飞语音,并且进去VC2以后,有个倒计时动效,这个动效初开始的时候 会卡顿3秒左右才运行动效
但是从VC3 pushVC2 不会卡顿。动效很流畅


同样一个页面,从不同的入口进去就有的卡,有的不卡。
报错为[avas] AVAudioSession.mm:1053:-[AVAudioSession setActive:withOptions:error:]: Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session.

解决方案

多加了一句代码 [_pcmRecorder stop];

原始代码
- (void)viewDidLoad {
    [super viewDidLoad];
    [UIApplication sharedApplication].idleTimerDisabled = YES;
    //配置讯飞
    [self configIFly];
    //开启监听
    [self startSpeech];
    //关闭监听
    [self.iFlySpeechEvaluator stopListening];
}
修改后的代码
- (void)viewDidLoad {
    [super viewDidLoad];
    [UIApplication sharedApplication].idleTimerDisabled = YES;
    //配置讯飞
    [self configIFly];
    //开启监听
    [self startSpeech];
    //关闭监听
    [_pcmRecorder stop];
    [self.iFlySpeechEvaluator stopListening];
}

原因分析

具体原因未知。

viewDidLoad只所以先开始讯飞,然后关闭讯飞,是因为不这样的话,在页面需要用讯飞的时候会报错,可能是讯飞的坑吧。

你可能感兴趣的:(iOS push 页面 跳转卡顿 延时 3秒 加载xib卡顿)