1,可以使用async/await来进行异步、耗时操作,例如:网络请求
2,若要处理大量数据,会导致UI挂起时,可以使用isolate来实现,Isolate是分离的运行线程不占用主线程的内存堆,当然,因此也不能访问主线程的变量或这使用setState()来更新UI
import 'dart:isolate';
//耗时进行异步请求
loadData()async{
//打开receivePort来接收传过来的数据
ReceivePort receivePort = new ReceivePort();
//创建并生成与当前Isolate共享相同代码的Isolate
await Isolate.spawn(dateLoader, receivePort.sendPort);
//流的第一个元素
SendPort sendPort = await receivePort.first;
//流的第一个数据被收到后会关闭,所以需要重新打开一个新的receivePort以接收传入的信息
ReceivePort receive = ReceivePort();
//通过此端口发送异步消息
List list = [11111,receive.sendPort];
sendPort.send(list);
List msg = await receive.first;
//...msg可以处理数据
}
//isolate的入口函数,该函数会在新的Isolate中调用isolate.spawn的message参数会作为调用他的唯一参数
dateLoader(SendPort sendPort)async{
//打开receivePort以接收参数
ReceivePort port = ReceivePort();
//通知其他的isolates ,本isolate所坚挺的端口
sendPort.send(port.sendPort);
await for(var msg1 in port){
// //获取其他端口发送的异步消息
// List msg = await port.first;
String data = msg1[0];
SendPort replyTo = msg1[1];
//...操作获取的data数据
String setData = data;
replyTo.send(setData);
}
}
3,