美文网首页
FlutterEngine使用不当导致App崩溃

FlutterEngine使用不当导致App崩溃

作者: Michale_Zuo | 来源:发表于2022-07-18 11:05 被阅读0次

 笔者公司的项目最近开始使用了Flutter,由于老项目维护的时间比较长了。我们采用了原生嵌入一部分Flutter页面的混合开发方式。项目开发完成测试阶段我们遇到了一个问题。就是原生页面跳转到FlutterViewController(flutter页面的根控制器,作为flutter的宿主页面)承载的页面时候。在返回原生页面,重复几次会导致APP的崩溃。下图是官网给的示例


1.png
2.png
// 1.创建引擎
// 2.引擎启动
// 3.引擎注册
// 4.创建FlutterViewController
self.flutterEngine = [[FlutterEngine alloc] initWithName:@"my flutter engine"];
  // Runs the default Dart entrypoint with a default Flutter route.
  [self.flutterEngine run];
  // Used to connect plugins (only if you have plugins with iOS platform code).
  [GeneratedPluginRegistrant registerWithRegistry:self.flutterEngine];
FlutterViewController *flutterViewController =
        [[FlutterViewController alloc] initWithEngine:flutterEngine nibName:nil bundle:nil];

笔者项目也是按照这个文档步骤来的,后来经过反复的查找,定位到为题所在,在初始化引擎的方法列表里,allowHeadlessExecution控制gluttervc的生命周期。设置为NO表示,当FlutterViewController销毁后,就停掉flutterEngine。

/**
 * Initialize this FlutterEngine with a `FlutterDartProject`.
 *
 * If the FlutterDartProject is not specified, the FlutterEngine will attempt to locate
 * the project in a default location (the flutter_assets folder in the iOS application
 * bundle).
 *
 * A newly initialized engine will not run the `FlutterDartProject` until either
 * `-runWithEntrypoint:` or `-runWithEntrypoint:libraryURI:` is called.
 *
 * @param labelPrefix The label prefix used to identify threads for this instance. Should
 *   be unique across FlutterEngine instances, and is used in instrumentation to label
 *   the threads used by this FlutterEngine.
 * @param project The `FlutterDartProject` to run.
 * @param allowHeadlessExecution Whether or not to allow this instance to continue
 *   running after passing a nil `FlutterViewController` to `-setViewController:`.
 */
- (instancetype)initWithName:(NSString*)labelPrefix
                     project:(nullable FlutterDartProject*)project
      allowHeadlessExecution:(BOOL)allowHeadlessExecution;

相关文章

  • FlutterEngine使用不当导致App崩溃

     笔者公司的项目最近开始使用了Flutter,由于老项目维护的时间比较长了。我们采用了原生嵌入一部分Flutter...

  • Dialog问题和对策

    ## 问题 0、第三方Dialog直接拿来用,不稳定导致App崩溃 1、全局Dialog使用不当,会莫名其妙的消失...

  • Android全局异常捕获

    全局异常捕获 UncaughtExceptionHandler 当app上线后,可能存在某些异常导致程序崩溃,开...

  • FlutterEngine

    众所周知,flutter有自己的渲染引擎Skia,而且它是开源的,那么我们能够在开源的代码上修改它,并在flutt...

  • Android-Crash监控

    Crash监控 Crash(应用崩溃)是由于代码异常而导致 App 非正常退出,导致应用程序无法继续使用,所有工作...

  • iOS Crash分析

      上线App Store有时候会因为应用崩溃导致杯具,这时,苹果审核人员会给你发送崩溃报告。但是,这个报告没有具...

  • Crash监控-Java&NDK

    Crash(应用崩溃)是由于代码异常而导致 App 非正常退出,导致应用程序无法继续使用,所有工作都 停止的现象。...

  • 内存优化

    为什么要进行内存优化:APP运行内存限制,OOM导致APP崩溃。APP性能:流畅性、响应速度和用户体验,因为GC回...

  • Android WebView独立进程解决方案

    App中大量Web页面的使用容易导致App内存占用巨大,存在内存泄露,崩溃率高等问题,WebView独立进程的使用...

  • Crash 监控

    Crash(应用崩溃)是由于代码异常而导致 App 非正常退出,导致应用程序无法继续使用,所有工作都停止的现象。发...

网友评论

      本文标题:FlutterEngine使用不当导致App崩溃

      本文链接:https://www.haomeiwen.com/subject/uxirirtx.html