真是一个大坑啊,根源在 dart SDK 部分,SSL 证书验证的网络请求在主线程请求的...有毒
https://dart-review.googlesource.com/c/sdk/+/165520
另外一提,这个问题只出现在 iOS,而 Android 不受影响,主要是因为在 SSL 证书验证时,iOS 有一步 OSCP 验证,但 Google 对 OSCP 方案不满意 https://blog.wirelessmoves.com/2015/03/ocsp-stapling-and-android-that-doesnt-care.html ,然后我们证书用的是 Let's Encript 的,然后它的 OSCP 服务器被墙了...
具体讨论可以参考
https://jhuo.ca/post/ocsp-stapling-letsencrypt/
https://github.com/dart-lang/sdk/issues/41519
https://github.com/flutterchina/dio/issues/703
https://github.com/flutterchina/dio/issues/786
解决方法:
- 换证书
- 等 flutter/dart 的升级(已经解决但还没 merge 发版到 stable)或者自行升级到 master
版权属于: Alan Clarke's Blog
原文地址: https://blog.xalanq.com/flutter-ios-https-stall-main-ui-thread/
转载时必须以链接形式注明原始出处及本声明。
开发环境用的http,不涉及证书,APP偶尔卡顿,无规律,几秒钟就好了,也是这个原因嘛?
http的应该不会吧
是当前最新版本的master吗?
不是,我用的stable
2.等 flutter/dart 的升级(已经解决但还没 merge 发版到 stable)或者自行升级到 master
这句话的意思是当前最新的master解决了卡顿的问题? 我换过去好像还是会因为这个原因卡顿。
根据官方的 https://dart-review.googlesource.com/c/sdk/+/165520 描述,dart 确实修复了
然后我看了下 https://github.com/flutter/flutter/commit/63852d2073c776d6d849e306b2e36274f2143eb3 flutter应该也更新了 dart SDK,或许是 flutter 更新到的 sdk 没有到最新?
用isolate对网络请求进行封装