0
点赞
收藏
分享

微信扫一扫

Flutter相关知识点

沪钢木子 2021-10-09 阅读 58
随笔

Flutter与原生通信,通过platformChannel进行通信。

(1)BasicMessageChannel:用于传递字符串和半结构化信息。

(2)MethodChannel:传递方法的调用

(3)EventChannel:数据流的通信


Flutter 异步方式?

flutter采用dart语言,像java这种多线程语言,任何一个线程触发异常且该异常未被捕获时,就会导致整个应用程序退出,dart不会,dart是单线程模型,在单线程模型中,dart是以消息循环机制来运行的,其中包含两个队列,一个是微任务(microtask queue )队列,一个是事件(event  queue)队列,微任务队列的执行优先级高于事件队列。

dart大致运行原理:先开启App执行入口函数main(),执行完成之后,消息机制启动,先是会按照先进先出的顺序逐个执行微任务队列中的任务microtask,事件任务eventtask执行完毕后便会退出,但是在事件任务执行过程中也可以插入新的微任务和事件任务,在这种情况下,整个线程的执行便是一直在循环,不会退出,而在flutter中,主线程的任务就是这样,永不停止。

Dart 中事件的执行顺序:Main > MicroTask > EventQueue

通常使用 scheduleMicrotask(…)或者Future.microtask(…)方法向微任务队列插入一个任务。

通常使用 Future 向 EventQueue加入事件,也可以使用 async 和 await 向 EventQueue 加入事件。

在事件循环中,当某个任务发生异常并不会导致程序整个退出,而直接导致的结果是当前任务的后续代码不会被执行,也就是说一个任务的异常是不会影响到其他任务的执行的。

在dart中,所有的外部事件任务都在事件队列中,包含IO、计时器、点击以及绘制事件等,而微任务通常来源于dart内部,并且微任务非常少,之所以如此,是因为微任务队列优先级较高,微任务越多,执行时间总和越长,事件队列任务的延迟也就越久,对于应用来说就会变得卡顿,所以要保证微任务队列不会太长。

举报

相关推荐

0 条评论