flutter 获取当前时间_深入理解Flutter多线程

本文深入探讨了Flutter的多线程机制,包括事件队列、async/await、Future、协程和Isolate。通过与iOS的GCD对比,帮助读者理解Flutter的异步处理和线程管理。文中强调了正确处理异步任务以避免阻塞UI的重要性,并介绍了如何使用Isolate处理耗时操作。
摘要由CSDN通过智能技术生成

8de2aa2d0179993e2b20394a218201b0.png

关注【搜狐技术产品】,第一时间获取技术干货

导读

从18年底Flutter1.0正式版发布以来,在国内出现了爆发式增长,包括闲鱼、抖音、今日头条在内的大多数公司,相继接入了Flutter,通过Flutter进行跨平台开发。

在使用Flutter的过程中,我们也需要对其一些特性进行研究和掌握,如果只是调用API的话并不能领悟到Flutter的精髓。

本篇文章详细讲解了Flutter的多线程,由于笔者是做iOS开发的,并且将Flutter的多线程和iOS的GCD进行了对比,以帮助大家理解Flutter多线程。

事件队列

Flutter默认是单线程任务处理的,如果不开启新的线程,任务默认在主线程中处理。

和iOS应用很像,在Dart的线程中也存在事件循环和消息队列的概念,但在Dart中线程叫做isolate。应用程序启动后,开始执行main函数并运行main isolate

每个isolate包含一个事件循环以及两个事件队列,event loop事件循环,以及event queuemicrotask queue事件队列,eventmicrotask队列有点类似iOS的source0source1

  • event queue:负责处理I/O事件、绘制事件、手势事件、接收其他isolate消息等外部事件。
  • microtask queue:可以自己向isolate内部添加事件,事件的优先级比event queue高。

1912dea289902d6c7b68c098abf353fb.png

这两个队列也是有优先级的,当isolate开始执行后,会先处理microtask的事件,当microtask队列中没有事件后,才会处理event队列中的事件,并按照这个顺序反复执行。但需要注意的是,当执行microtask事件时,会阻塞event队列的事件执行,这样就会导致渲染、手势响应等event事件响应延时。为了保证渲染和手势响应,应该尽量将耗时操作放在event队列中。

async、await

在异步调用中有三个关键词,asyncawaitFuture,其中asyncawait需要一起使用。在Dart中可以通过asyncawait进行异步操作,async表示开启一个异步操作,也可以返回一个Future结果。如果没有返回值,则默认返回一个返回值为nullFuture

asyncawait本质上就是Dart对异步操作的一个语法糖,可以减少异步调用的嵌套调用,并且由async修饰后返回一个Future,外界可以以链式调用的方式调用。这个语法是JSES7标准中推出的,Dart的设计和JS相同。

下面封装了一个网络请求的异步操作,并且将请求后的Response类型的Future返回给外界,外界可以通过await调用这个请求,并获取返回数据。从代码中可以看到,即便直接返回一个字符串,Dart也会对其进行包装并成为一个Future

 1Future<Response> dataReqeust() async {
 2    String requestURL = 'https://jsonplaceholder.typicode.com/posts';
 3    Client client = Client();
 4    Future<Response> response = client.get(reque
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值