前言
做过Android原生开发的同学都知道,在安卓原生开发中有主线程(也叫UI线程)和工作线程的概念,诸如像网络请求、IO操作等的耗时操作,为了避免产生ANR(应用程序无响应)我们都会放到单独创建的工作线程中去处理,这样一来负责UI渲染的主线程的运行就不受影响了,用户看到的界面也就不会有任何的卡顿挂起了,另一方面Android原生中系统要求所有UI的更新是必须在主线程中完成的,因此如果工作线程中的某个操作需要更新UI界面,我们必须通知给主线程去完成,一旦直接在工作线程中去更新UI则会报异常,因此在Android中就有一个重要的概念叫线程间通信,同时也把在工作线程中处理耗时操作的过程称为异步处理,这里的异主要指的是不同的线程。
然而众所周知Dart是单线程模型(此处特指dart中线程的设计思路,并不等于只能存在一个线程),Dart中同一时刻只执行一个操作,其他操作在该操作之后执行,这意味着只要一个操作正在执行,它就不会被其他 Dart 代码中断,并且之后的操作也无法被执行,基于Dart这种单线程模型的设计我们很难像Android原生那样针对耗时操作去创建一个单独的线程去完成,那么在Flutter中我们该如何实现类似的异步处理呢,即所谓的异步编程呢,答案是使用Future。
Future的异步处理(非多线程方式)
在Flutter中系统为我们提供了一个抽象类Future用来专门处理异步任务,那么他具体是如何做到不阻塞主线程的运行的呢?
通过上面的分析我们知道Android原生处理异步任务的方法就是创建多线程,从而保证主线程的运行不受耗时任务的影响,那么在单线程设计模