2021-04-01 flutter多线程isolate
dart的设计模式是以单线程设计,所以,众所周知,当遇到计算比较繁杂的数学逻辑运算时,最好把它们放到多线程当中。原始的多线程使用过于繁琐,且不如框架用的好些,这里介绍一下这里用到的三方库。就叫做:
isolate: ^2.0.0
使用方法:
第一步:LoadBalancer loadBalancer=LoadBalancer.create(4,IsolateRunner.spawn);这里尽量避免多次调用,每次调用会创建4条线程,但它的关闭不需要管,会自动关闭。
第二步:ApiResponse,List
final lb =await loadBalancer;
ApiResponse res =await lb.run <ApiResponse,List>(handleCounter, [method,param,]);这里<>中ApiResponse为返回值,List为handleCounter方法的请求参数。
第三步:在方法体handleCounter中耗时操作;
static Future<ApiResponse> handleCounter(List list) async {
ApiResponse response =await HttpUtils.requestIsolate(list[0],data: list[1]);
if(response.isResultSuccess()){
if(response.data!=null){
}
}
return response;
}
注意:flutter的多线程不能共享内存,因此像操作数据库、shareperence、获取手机设备等等操作好像都不行,会出现以下报错日志。如果有高手有办法,请留言。
If you're running an application and need to access the binary messenger before `runApp()` has been called (for example, during plugin initialization), then you need to explicitly call the `WidgetsFlutterBinding.ensureInitialized()` first