美文网首页Flutter学习笔记
Flutter的多线程(Isolate)和异步(async/aw

Flutter的多线程(Isolate)和异步(async/aw

作者: 王俏 | 来源:发表于2019-10-10 10:48 被阅读0次

怎么编写异步的代码

Dart有一个单线程执行模型,支持Isolate(一种在另一个线程上运行Dart代码的方法),一个事件循环和异步编程.除非自己创建一个Isolate,否则dart代码永远运行在主UI线程,
并由event loop驱动.Flutter的event loop 和IOS中的main loop相似:Looper是附加在主线程的.

Dart的单线程模型,并不意味着代码一定要作为阻塞操作的方式运行,从而卡住UI.相反,可以使用Dart语言提供的异步工具,例如async/await,来实现异步操作(编写网络请求代码/数据库访问,而不会挂起UI).

怎么把工作放到后台线程执行

由于Flutter是单线程并且跑着一个event loop,因此不必担心线程管理或生成后台线程.如果正在做I/O操作,如访问磁盘或网络请求,可以安全地使用async/await来完成.如果需要让CPU执行繁忙的计算密集型任务,需要使用Isolate来避免阻塞event loop.

Isolate是分离的运行线程,并且不和主线程的内存堆共享内存.这意味着不能访问主线程中的变量,或者使用setState()来更新UI.

isolate1.png isolate2.png

dataLoader()是一个运行于自己独立执行线程上的Isolate.在Isolate里,你可以执行CPU密集型任务(例如解析一个庞大的json,解析json也是很耗时的),或是计算密集型的数学操作,如加密或信号处理等

相关文章

网友评论

    本文标题:Flutter的多线程(Isolate)和异步(async/aw

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