刚接手一个新项目,app刚运行时,就打印了如下日志,还导致了严重的卡顿。
问题:
```Objective-C
2019-12-18 15:43:14.195169+0800 xxx_Project[957:163233] | JIGUANG | I - [JIGUANGSessionController] connecting with coreAddr 121.46.20.44,port 7010
Main Thread Checker: UI API called on a background thread: -[UIApplication currentUserNotificationSettings]
PID: 957, TID: 163245, Thread name: org.hxhg.jiguang.thread, Queue name: com.apple.root.default-qos.overcommit, QoS: 0
Backtrace:
4 xxx_Project 0x0000000100f9a72c -[JPUSHAPNSStateReport init] + 232
5 xxx_Project 0x0000000100f9e4cc -[JPUSHClientController UDPReportAPNSState] + 44
6 xxx_Project 0x0000000100f9dd74 -[JPUSHClientController setup] + 484
7 Foundation 0x000000019939b22c 503900AF-2ECD-329F-B742-C07C3E672BEB + 1278508
8 CoreFoundation 0x0000000198f30a00 1B9B1E61-8CB4-3903-9870-402C3DE959BB + 694784
9 CoreFoundation 0x0000000198f30958 1B9B1E61-8CB4-3903-9870-402C3DE959BB + 694616
10 CoreFoundation 0x0000000198f300f0 1B9B1E61-8CB4-3903-9870-402C3DE959BB + 692464
11 CoreFoundation 0x0000000198f2b23c 1B9B1E61-8CB4-3903-9870-402C3DE959BB + 672316
12 CoreFoundation 0x0000000198f2aadc CFRunLoopRunSpecific + 464
13 CoreFoundation 0x0000000198f2b828 CFRunLoopRun + 60
14 xxx_Project 0x0000000100f6e40c -[JPUSHThread clientThreadMain] + 100
15 Foundation 0x000000019939b0a4 503900AF-2ECD-329F-B742-C07C3E672BEB + 1278116
16 libsystem_pthread.dylib 0x0000000198ccdd8c _pthread_start + 156
17 libsystem_pthread.dylib 0x0000000198cd176c thread_start + 8
2019-12-18 15:43:14.357377+0800 xxx_Project[957:163245] [reports] Main Thread Checker: UI API called on a background thread: -[UIApplication currentUserNotificationSettings]
PID: 957, TID: 163245, Thread name: org.hxhg.jiguang.thread, Queue name: com.apple.root.default-qos.overcommit, QoS: 0
Backtrace:
4 xxx_Project 0x0000000100f9a72c -[JPUSHAPNSStateReport init] + 232
5 xxx_Project 0x0000000100f9e4cc -[JPUSHClientController UDPReportAPNSState] + 44
6 xxx_Project 0x0000000100f9dd74 -[JPUSHClientController setup] + 484
7 Foundation 0x000000019939b22c 503900AF-2ECD-329F-B742-C07C3E672BEB + 1278508
8 CoreFoundation 0x0000000198f30a00 1B9B1E61-8CB4-3903-9870-402C3DE959BB + 694784
9 CoreFoundation 0x0000000198f30958 1B9B1E61-8CB4-3903-9870-402C3DE959BB + 694616
10 CoreFoundation 0x0000000198f300f0 1B9B1E61-8CB4-3903-9870-402C3DE959BB + 692464
11 CoreFoundation 0x0000000198f2b23c 1B9B1E61-8CB4-3903-9870-402C3DE959BB + 672316
12 CoreFoundation 0x0000000198f2aadc CFRunLoopRunSpecific + 464
13 CoreFoundation 0x0000000198f2b828 CFRunLoopRun + 60
14 xxx_Project 0x0000000100f6e40c -[JPUSHThread clientThreadMain] + 100
15 Foundation 0x000000019939b0a4 503900AF-2ECD-329F-B742-C07C3E672BEB + 1278116
16 libsystem_pthread.dylib 0x0000000198ccdd8c _pthread_start + 156
17 libsystem_pthread.dylib 0x0000000198cd176c thread_start + 8
2019-12-18 15:43:30.876049+0800 xxx_Project[957:163247] | JIGUANG | E - [JIGUANGSessionController] ack timeout for request rid: 21
2019-12-18 15:43:32.890411+0800 xxx_Project[957:163250] | JIGUANG | I - [JIGUANGSessionController] connecting with coreAddr 121.46.20.44,port 7010
``
我的解惑步骤如下:
1、看日志有:[UIApplication currentUserNotificationSettings],那么肯定是跟推送有关系,认为这个方法不能与极光推公用,导致的卡顿。将其注释,发现无效。
2、反其道而行之,注释极光推初始化文件,发现没有卡顿的问题了,由此判断,根本原因是极光推的问题。
于是打断点,看文档,查看极光推的初始化及其实现步骤,发现,整个流程都没什么问题。
3、查看极光推SDK最新版本,已经是V3.2.6,而项目使用的是V3.0.5版本,于是立即更新SDK,重新运行,发现不再出现类似的提示。
问题解决,这个处理方式。
发现不足:
刚开始尝试了1和2的方法,但是当时时间紧任务重,没想是SDK版本问题,着急先做新增模块了。后来在开发的过程中偶然回想到SDK版本迭代,才用了第3个处理方案。
但是,我查看了极光推的SDK更新日志,并没有提到卡顿的情况,以及解决方案;工单也没有看到类似的问题。要解决这个问题只能去不断的尝试,太过依赖开发经验,这是很致命的。
当然,还有个最直接的方法,就是使用Instruments-time profile 工具做性能优化检测,可以直接找出现卡顿的具体事哪个方法。然后作出对应的解决方法。至于性能优化检测怎么用,有很多可以参考的,这里不作简述了。