当前位置: 首页> 游戏> 游戏 > 北京海淀中关村找工作网站_成都网络营销_关键字搜索_电商详情页模板免费下载

北京海淀中关村找工作网站_成都网络营销_关键字搜索_电商详情页模板免费下载

时间:2025/7/11 23:58:22来源:https://blog.csdn.net/intheair100/article/details/147541931 浏览次数:0次
北京海淀中关村找工作网站_成都网络营销_关键字搜索_电商详情页模板免费下载

在 Flutter 混合开发中,iOS 端的 ​​Flutter 引擎初始化时机​​ 取决于集成方式(纯 Flutter 或混合开发)。以下是详细分析:


​1. 纯 Flutter 应用(默认 Flutter App)​

​初始化时机​
  • ​启动即初始化​​:当应用启动时,Flutter 引擎会在 main() 函数执行前自动初始化。
  • ​调用栈​​:
    UIApplicationMain → FlutterAppDelegate → FlutterEngine 初始化 → Dart `main()` 执行
​关键代码​
  • AppDelegate​(自动生成):
     

    swift

    复制

    @UIApplicationMain
    class AppDelegate: FlutterAppDelegate {override func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {// FlutterEngine 已由父类 FlutterAppDelegate 初始化GeneratedPluginRegistrant.register(with: self) // 注册插件return super.application(application, didFinishLaunchingWithOptions: launchOptions)}
    }

​2. 混合开发(iOS Native + Flutter Module)​

​初始化方式​

开发者需 ​​手动控制​​ Flutter 引擎初始化时机,常见两种场景:

​① 提前初始化(应用启动时)​
  • ​目标​​:减少首次进入 Flutter 页面的延迟。
  • ​代码示例​​:
     

    swift

    复制

    // AppDelegate.swift
    import Flutter
    import FlutterPluginRegistrant@main
    class AppDelegate: UIResponder, UIApplicationDelegate {var flutterEngine: FlutterEngine?func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {// 提前初始化 FlutterEngineflutterEngine = FlutterEngine(name: "io.flutter")flutterEngine?.run() // 启动 Dart 虚拟机GeneratedPluginRegistrant.register(with: flutterEngine!) // 注册插件return true}
    }
​② 懒加载(首次进入 Flutter 页面时)​
  • ​目标​​:节省内存,按需加载。
  • ​代码示例​​:
     

    swift

    复制

    // FlutterViewController 加载时初始化
    class FlutterWrapperViewController: UIViewController {private var flutterEngine: FlutterEngine?override func viewDidLoad() {super.viewDidLoad()flutterEngine = FlutterEngine(name: "flutter_engine")flutterEngine?.run(withEntrypoint: nil)let flutterVC = FlutterViewController(engine: flutterEngine!, nibName: nil, bundle: nil)addChild(flutterVC)view.addSubview(flutterVC.view)flutterVC.didMove(toParent: self)}
    }

​3. 关键结论​

​场景​​初始化时机​​优点​​缺点​
​纯 Flutter 应用​应用启动时自动初始化无需手动管理无法延迟,占用内存
​混合开发(提前)​在 AppDelegate 中提前初始化减少首次进入 Flutter 页面的延迟增加启动时间,占用内存
​混合开发(懒加载)​首次打开 Flutter 页面时初始化节省内存,按需加载首次进入可能有短暂延迟

​4. 性能优化建议​

  1. ​预初始化 + 缓存引擎​

    • 在 AppDelegate 中初始化并缓存 FlutterEngine,避免重复创建:
       

      swift

      复制

      class AppDelegate: UIResponder, UIApplicationDelegate {static let sharedFlutterEngine = FlutterEngine(name: "shared_engine")func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {AppDelegate.sharedFlutterEngine.run()return true}
      }
  2. ​多引擎管理​

    • 为不同的 Flutter 页面创建独立的 FlutterEngine(隔离状态):
       

      swift

      复制

      let profileEngine = FlutterEngine(name: "profile_engine")
      profileEngine.run(withEntrypoint: "profileMain")
  3. ​插件注册优化​

    • 懒加载非必要插件:
       

      swift

      复制

      flutterEngine?.plugins.add(MyLazyPlugin()) // 按需注册

​5. 常见问题​

​Q1:Flutter 引擎初始化失败怎么办?​
  • ​检查项​​:
    • Flutter 模块是否正确集成(flutter pub get 和 pod install)。
    • 确保 FlutterEngine.run() 调用在 ​​主线程​​ 执行。
​Q2:如何监听引擎初始化完成?​
  • 通过 FlutterEngine 的 binaryMessenger 属性判断:
     

    swift

    复制

    if flutterEngine?.binaryMessenger != nil {print("引擎已就绪")
    }
​Q3:引擎初始化耗时多久?​
  • ​实测数据​​(iPhone 13, Release 模式):
    • 冷启动:~200ms(首次初始化)。
    • 热复用:~10ms(已缓存引擎)。

​总结​

  • ​纯 Flutter 应用​​:引擎自动初始化,无需干预。
  • ​混合开发​​:根据需求选择 ​​提前初始化​​(优化体验)或 ​​懒加载​​(节省资源)。
  • ​最佳实践​​:预初始化 + 缓存引擎,平衡性能与内存占用。
关键字:北京海淀中关村找工作网站_成都网络营销_关键字搜索_电商详情页模板免费下载

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: