針對(duì)iOS編譯Flutter引擎
現(xiàn)有iOS項(xiàng)目中以module的方式接入Flutter,并且從原生頁面跳轉(zhuǎn)進(jìn)Flutter的時(shí)候,會(huì)發(fā)現(xiàn)內(nèi)存飆升妖枚,并且在退出FlutterViewController之后但指,內(nèi)存并沒有銷毀谎柄;就會(huì)導(dǎo)致原本手機(jī)內(nèi)存就吃緊的情況下阻星,造成app的閃退朋鞍。
雖然可以通過單引擎單FlutterViewController的方式來抵消部分內(nèi)存消耗已添,但是使用單引擎單FlutterViewController來跳轉(zhuǎn)Flutter制定頁面的時(shí)候就顯得不方便妥箕,并且FlutterViewController的setInitialRoute方法會(huì)失效,導(dǎo)致使用setInitialRoute來跳轉(zhuǎn)指定Widget頁面的時(shí)候更舞,window.defaultRouteName收到的總是“/”畦幢,得不到設(shè)定的數(shù)據(jù)。
之所以使用單引擎單FlutterViewController的方式會(huì)出現(xiàn)這種問題缆蝉,是因?yàn)镕lutterEngin在啟動(dòng)的時(shí)候就默認(rèn)加載了Widget宇葱,導(dǎo)致設(shè)置setInitialRoute的時(shí)候不生效。
為了探究這個(gè)問題刊头,就需要拿到flutter有關(guān)engin的源碼黍瞧,看了源碼后,自然就會(huì)有修改源碼的沖動(dòng)原杂;修改后如何進(jìn)行編譯呢印颤?
有關(guān)如何進(jìn)行編譯Flutter.framework,可以參考針對(duì)iOS在Mac平臺(tái)上編譯Flutter引擎
后續(xù)有空將會(huì)說明,F(xiàn)lutterViewController穿肄、FlutterEngin年局、FlutterMethodChannel际看、FlutterEventChannel以及Flutter的集中decodec存在關(guān)系。