王尘宇王尘宇

研究百度干SEO做推广变成一个被互联网搞的人

【Flutter面试题】基础篇(持续更新)

生命周期

8. Flutter与原生通信的Channel有哪几种?
Flutter定义了三种不同类型的Channel,它们分别是:
BasicMessageChannel:用于传递字符串和半结构化的信息。
MethodChannel:用于传递方法调用(method invocation)。
EventChannel: 用于数据流(event streams)的通信。

9.介绍下 Flutter 的优缺点:
(1)优点
• 热重载(Hot Reload),利用 Android Studio 直接一个 ctrl+s 就可以保存
并重载,模拟器立马就可以看见效果,相比原生冗长的编译过程强很多;
• 一切皆为 Widget 的理念,对于 Flutter 来说,手机应用里的所有东西都是Widget,通过可组合的空间集合、丰富的动画库以及分层课扩展的架构实现了富有感染力的灵活界面设计;
• 借助可移植的 GPU 加速的渲染引擎以及高性能本地代码运行时以达到跨平台设备的高质量用户体验。 简单来说就是:最终结果就是利用 Flutter 构建应用在运行效率上会和原生应用差不多。
(2)缺点
• 不支持热更新;
• 三方库有限,需要自己造轮子;
• Dart 语言编写,增加了学习难度,并且学习了 Dart 之后无其他用处,相比
JS 和 Java 来说。

10.简述 Widget 的 StatelessWidget 和StatefulWidget 两种状态组件类。
• StatelessWidget: 一旦创建就不关心任何变化,在下次构建之前都不会改变。它们除了依赖于自身的配置信息(在父节点构建时提供)外不再依赖于任何其他信息。比如典型的 Text、Row、Column、Container 等,都是StatelessWidget。它的生命周期相当简单:初始化、通过 build()渲染。
• StatefulWidget: 在生命周期内,该类 Widget 所持有的数据可能会发生变化,这样的数据被称为 State,这些拥有动态内部数据的 Widget 被称为 StatefulWidget。比如复选框、Button 等。State 会与 Context 相关联,并且此关联是永久性的,State 对象将永远不会改变其 Context,即使可以在树结构周围移动,也仍将与该 context 相关联。当 state 与 context关联时,state 被视为已挂载。StatefulWidget 由两部分组成,在初始化时必须要在 createState()时初始化一个与之相关的 State 对象。

11.Flutter在Debug和Release下分别使用什么编译模式,有什么区别?
Debug模式下使用JIT编译模式,即Just in time(即时编译),Release下使用AOT模式,即Ahead of time(提前编译)。JIT模式因为需要边运行边编译,所以会占用运行时内存,导致卡顿现象,但是有动态编译效果对于开发者来说非常方便调试。AOT模式提前编译不会占用运行时内存,相对来说运行流畅,但是会导致编译时间增加。

12.Flutter出现异常时如何友好的提示用户?
使用ErrorWidget.builder进行全局设置自定义界面即可。

相关文章

评论列表

发表评论:
验证码

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。