flutter共享engine

flutter 共享引擎 问题记录

共享引擎,就是只有一个 flutter engine,每个页面一个 flutterviewcontroller。
flutter页面 切换,引擎会相应的 detach atach

最近 升级 flutter 到 v1.12.13 版本后,贡献引擎遇到的几个问题 记录下

present flutter 页面

这个其实不是v1.12.13出现的问题

flutterPageA present flutterPageB 会 出现 pageA的 viewDidDisappear 比 pageB的 viewDidAppear 后执行

1
2
3
4
5
6
7
8
9
10
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
//处理下present 页面卡死的情况
if ([WD_FLUTTER_ENGINE flutterViewController] != self) {
[WD_FLUTTER_ENGINE resume];
[(WDFlutterViewContainer *)[WD_FLUTTER_ENGINE flutterViewController] surfaceUpdated:YES];
} else {
[WD_FLUTTER_ENGINE detach];
}
}

从flutter 返回到 native页面

在 v.1.12.13之前 flutter popto native 无需处理
v.1.12.13 出现crash

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[VERBOSE-2:FlutterObservatoryPublisher.mm(131)] Could not register as server for FlutterObservatoryPublisher. Check your network settings and relaunch the application.
SCNetworkReachabilitySetDispatchQueue() failed: Invalid argument
SCNetworkReachabilitySetDispatchQueue() failed: Invalid argument
localConnectionInitializedStatus:2
localConnectionInitializedStatus:2
SCNetworkReachabilitySetDispatchQueue() failed: Invalid argument
[Bugly] Fatal signal(11) raised.
[Bugly] Trapped fatal signal 'SIGSEGV(11)'
(
"0 Flutter 0x000000010516f92c _ZNK3fml8internal14CopyableLambdaIZN7flutter5Shell21OnPlatformViewCreatedENSt3__110unique_ptrINS2_7SurfaceENS4_14default_deleteIS6_EEEEE3$_8EclIJEEEDaDpOT_ + 236",
"1 Flutter 0x000000010516f928 _ZNK3fml8internal14CopyableLambdaIZN7flutter5Shell21OnPlatformViewCreatedENSt3__110unique_ptrINS2_7SurfaceENS4_14default_deleteIS6_EEEEE3$_8EclIJEEEDaDpOT_ + 232",
"2 Flutter 0x0000000105123cf4 _ZN3fml15MessageLoopImpl10FlushTasksENS_9FlushTypeE + 1700",
"3 Flutter 0x0000000105126000 _ZN3fml17MessageLoopDarwin11OnTimerFireEP16__CFRunLoopTimerPS0_ + 32",
"4 CoreFoundation 0x0000000184cd3aa8 0x0000000184be5000 + 977576",
"5 CoreFoundation 0x0000000184cd376c 0x0000000184be5000 + 976748",
"6 CoreFoundation 0x0000000184cd3010 0x0000000184be5000 + 974864",
"7 CoreFoundation 0x0000000184cd0b60 0x0000000184be5000 + 965472",
"8 CoreFoundation 0x0000000184bf0da8 CFRunLoopRunSpecific + 552",
"9 Flutter 0x0000000105125edc _ZN3fml17MessageLoopDarwin3RunEv + 88",
"10 Flutter 0x0000000105125684 _ZNSt3__114__thread_proxyINS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEZN3fml6ThreadC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEE3$_0EEEEEPvSJ_ + 200",
"11 libsystem_pthread.dylib 0x0000000184951220 0x000000018494f000 + 8736",
"12 libsystem_pthread.dylib 0x0000000184951110 0x000000018494f000 + 8464"
)
Application finished.

处理办法:

flutterVc dealloc 或者 disappear 的时候 执行 flutterEngine detach