提示:阅读此文章之前,需要对同步,异常,多线程等概念有基本的理解。
目录
前言
在开发过程中遇到处理一些计算量大的操作或网络请求或解析数据时通常会使用异步方法Future来尝试解决处理数据导致UI更新卡顿甚至卡死的问题,但如果数据量大的话使用Fluture异步方法后还是会导致卡顿或卡死现象,这个时候就需要用到另一个异步方法,也就是本次讲解的内容isolate,通过开辟一个单独isolate来独立执行耗时任务,然后通过消息机制把最终计算结果发送给主isolate实现UI的更新。
一、isolate是什么?
isolate可以理解为是概念上Thread线程,Dart 是单线程的并且 Flutter 依赖于 Dart,在Dart中并不是叫Thread ,而是有个专门名词叫 isolate,也可以直接理解为是 Dart 中的线程。
isolate和Thread都是会去创建一个OSThread,也就是说最终都是委托创建操作系统层面的线程。isolate与线程的区别就是线程与线程之间是共享内存的,而isolate和 isolate之间是内存不共享的。 两个Isolate完全是两条独立的执行线,且每个Isolate都有自己的事件循环,它们之间只能通过发送消息通信,所以它的资源开销低于线程。
二、isolate代码实践
举个例子:我们在计时展示秒数时接收到了一个数据需要我们解析;
效果图:
1.创建一个倒计时计时并展示在界面上
代码如下:
//创建计时器
Timer? _timer;
//展示的秒数
int second = 0;
@override
void initState() {
_timer = Timer.periodic(Duration(seconds: 1), (timer) {
if (mounted) {
setState(() {
second++;
});
}
});
super.initState();
}
@override
void