自从用了 Texture(原来的 ASDK)以后,顺便把图片请求库换成了 PINRemoteImage,结果在 Fabric 上看到 crash 数量大量增长。最多的就是如下这种:
Crashed: com.apple.NSURLSession-work
0 CoreFoundation 0x18bb67d9c CFDictionaryGetValue + 76
1 Foundation 0x18c74ceb8 _NSSetLongLongValueAndNotify + 72
2 CFNetwork 0x18c2b4fa4 -[__NSCFLocalSessionTask _task_onqueue_didFinish] + 428
3 CFNetwork 0x18c2b7708 -[__NSCFLocalSessionTask connection:didFinishLoadingWithError:] + 72
4 CFNetwork 0x18c36d298 __51-[__NSCFURLLocalSessionConnection _task_sendFinish]_block_invoke + 136
5 CFNetwork 0x18c36d204 -[__NSCFURLLocalSessionConnection _task_sendFinish] + 88
6 libdispatch.dylib 0x18ab4a9e0 _dispatch_call_block_and_release + 24
7 libdispatch.dylib 0x18ab4a9a0 _dispatch_client_callout + 16
8 libdispatch.dylib 0x18ab58ad4 _dispatch_queue_serial_drain + 928
9 libdispatch.dylib 0x18ab4e2cc _dispatch_queue_invoke + 884
10 libdispatch.dylib 0x18ab5aa50 _dispatch_root_queue_drain + 540
11 libdispatch.dylib 0x18ab5a7d0 _dispatch_worker_thread3 + 124
12 libsystem_pthread.dylib 0x18ad53100 _pthread_wqthread + 1096
13 libsystem_pthread.dylib 0x18ad52cac start_wqthread + 4
搜了一圈,发现 14 年的时候 AFNetworking 也出现过类似问题
总结起来就是 libdispatch 的实现估计有问题,在多线程 racing 的情况下对 state 用 KVO 有概率造成 crash
AFNetworking 最后用了 method swizzle 来实现对 state 变化的观察,见此
PINRemoteImage 上也有人提了相关问题了,还未做修改
1
kitalphaj 2017-09-07 18:26:23 +08:00
感谢分享。话说用了 ASDK 的感受可以说一下么?要真实感受,不要夸张 ;)
|
2
xi_lin OP @kitalphaj 挺好用的,特别是用 flex 布局,写起来比 auto layout 更灵活一些,而且不用考虑重用的时候各种条件样式的问题。
在 table 中用的时候要注意下数据模型的线程安全,不要在 reload 的时候改数据。 |
3
workhardupc 2017-09-14 09:40:48 +08:00
@xi_lin 解决后,线上验证了吗?
|
4
xi_lin OP @workhardupc 今天刚过审,等几天看看数据
|
5
workhardupc 2017-09-14 16:00:02 +08:00
@xi_lin 好的,我们也遇到这个问题,有结果后给说下,谢谢
|
6
workhardupc 2017-09-14 20:11:49 +08:00
@xi_lin 方便加 QQ 沟通下吗?我的 QQ:403758652
|
7
workhardupc 2017-09-18 12:10:56 +08:00
|
8
xi_lin OP @workhardupc 数据不错,这几天都没有这个 crash 了。
我是把 kvo 给删了,因为没用到 progressive 这个功能 https://github.com/xilin/PINRemoteImage/tree/kvo-workaround 之前加你 qq 了,你没通过 |