案例一
發(fā)生場(chǎng)景
iOS 13 系統(tǒng),系統(tǒng)中文鍵盤在Flutter輸入文字后,返回原生,輸入框獲取焦點(diǎn)時(shí)閃退。
可能原因:
Flutter引擎中存在內(nèi)存泄漏,引擎釋放后,Input代理對(duì)象成為野指針
crash原因:
Flutter引擎中輸入框輸入時(shí)會(huì)在Window上添加一個(gè) FlutterTextInputView ,在引擎銷毀時(shí),這個(gè)FlutterTextInputView并沒(méi)有被釋放,在原生輸入框獲取焦點(diǎn)時(shí),系統(tǒng)會(huì)先調(diào)用這個(gè)FlutterTextInputView的獲取焦點(diǎn)方法來(lái)判斷,F(xiàn)lutterTextInputView中有個(gè)textInputDelegate指向了已銷毀的引擎地址,導(dǎo)致野指針錯(cuò)誤(暫時(shí)不知道為什么只有iOS13的系統(tǒng)中午輸入法獲取焦點(diǎn)時(shí)會(huì)走到代理方法中)
解決方案:
1、找到內(nèi)存泄漏的原因并解決(可能需要修改flutter的引擎代碼并打包,難度較大)
2、嘗試使用單例引擎
3、在有輸入框的Flutter頁(yè)面的deinit方法中將window上的FlutterTextInputView移除

image2021-3-12_13-57-33.png
總結(jié)
還有遇到的奇葩問(wèn)題,歡迎大家補(bǔ)充!