2021-04-01 flutter多线程isolate

2021-04-01  本文已影响0人  没有钱也很认真

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

上一篇下一篇

猜你喜欢

热点阅读