实践

作者: 莫库施勒 | 来源:发表于2019-08-08 14:29 被阅读0次

    Flutter App运行机制
    Flutter构建出的APK在运行时会将所有assets目录下的资源文件解压到App私有文件目录中的flutter目录下,主要包括处理字符编码的icudtl.dat,还有Debug模式的kernel_blob.bin、platform.dill和Release模式下的4个snapshot文件。默认情况下Flutter在Application.onCreate时调用FlutterMain.startInitialization来启动解压任务,然后在FlutterActivityDelegate.onCreate中调用FlutterMain.ensureInitializationComplete来等待解压任务结束。

    Flutter在Debug模式下使用JIT执行方式,主要是为了支持广受欢迎的热刷新功能:


    image

    触发热刷新时Flutter会检测发生改变的Dart文件,将其同步到App私有缓存目录下,DartVM加载并且修改对应的类或者方法,重建控件树后立即可以在设备上看到效果。

    在Release模式下Flutter会直接将snapshot文件映射到内存中执行其中的指令:

    image
    在Release模式下, FlutterActivityDelegate.onCreate中调用FlutterMain.ensureInitializationComplete方法中会将AndroidManifest中设置的snapshot(没有设置则使用上面提到的默认值)文件名等运行参数设置到对应的C++同名类对象中,构造FlutterNativeView实例时调用nativeAttach来初始化DartVM,运行编译好的Dart代码。

    相关文章

      网友评论

          本文标题:实践

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