案例一
发生场景
iOS 13 系统,系统中文键盘在Flutter输入文字后,返回原生,输入框获取焦点时闪退。
可能原因:
Flutter引擎中存在内存泄漏,引擎释放后,Input代理对象成为野指针
crash原因:
Flutter引擎中输入框输入时会在Window上添加一个 FlutterTextInputView ,在引擎销毁时,这个FlutterTextInputView并没有被释放,在原生输入框获取焦点时,系统会先调用这个FlutterTextInputView的获取焦点方法来判断,FlutterTextInputView中有个textInputDelegate指向了已销毁的引擎地址,导致野指针错误(暂时不知道为什么只有iOS13的系统中午输入法获取焦点时会走到代理方法中)
解决方案:
1、找到内存泄漏的原因并解决(可能需要修改flutter的引擎代码并打包,难度较大)
2、尝试使用单例引擎
3、在有输入框的Flutter页面的deinit方法中将window上的FlutterTextInputView移除
总结
还有遇到的奇葩问题,欢迎大家补充!