Flutter引擎内存泄漏问题集合

案例一
发生场景

iOS 13 系统,系统中文键盘在Flutter输入文字后,返回原生,输入框获取焦点时闪退。

可能原因:

Flutter引擎中存在内存泄漏,引擎释放后,Input代理对象成为野指针

crash原因:

Flutter引擎中输入框输入时会在Window上添加一个 FlutterTextInputView ,在引擎销毁时,这个FlutterTextInputView并没有被释放,在原生输入框获取焦点时,系统会先调用这个FlutterTextInputView的获取焦点方法来判断,FlutterTextInputView中有个textInputDelegate指向了已销毁的引擎地址,导致野指针错误(暂时不知道为什么只有iOS13的系统中午输入法获取焦点时会走到代理方法中)

解决方案:

1、找到内存泄漏的原因并解决(可能需要修改flutter的引擎代码并打包,难度较大)

2、尝试使用单例引擎

3、在有输入框的Flutter页面的deinit方法中将window上的FlutterTextInputView移除


image2021-3-12_13-57-33.png
总结

还有遇到的奇葩问题,欢迎大家补充!

你可能感兴趣的:(Flutter引擎内存泄漏问题集合)