我正在学习Flutter的计算功能。我对它的理解是,它用于将计算繁重的工作卸载到另一个线程,以免阻塞UI线程。我遇到了一些我不太理解的行为。考虑下面的应用程序。
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
void main() => runApp(new MyApp());
class StringValues {
static String foo = 'Foo';
static String bar;
}
String _calculate(String value) {
return value + ' ' + (StringValues.foo ?? 'undefined') + ' ' + (StringValues.bar ?? 'undefined');
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
void _testCompute() async {
String result1 = _calculate('values are:');
String result2 = await compute(_calculate, 'values are:');
StringValues.bar = 'Bar';
String result3 = _calculate('values are:');
String result4 = await compute(_calculate, 'values are:');
print(result1);
print(result2);
print(result3);
print(result4);
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
floatingActionButton: new FloatingActionButton(
onPressed: _testCompute,
child: new Icon(Icons.print),
),
);
}
}
_testCompute函数的输出是:
values are: Foo undefined
values are: Foo undefined
values are: Foo Bar
values are: Foo undefined
它编译得很好。我希望result4
与result3
。有人能解释为什么不是吗?我还尝试了一种不同的方法,使用这里描述的“globals”,但结果是一样的。
< code>compute()创建新的隔离。以这种方式开始的隔离只共享代码。< br >这类似于您将使用< code>_calculate而不是< code>main作为入口点来启动同一项目的新流程。
< code>compute使用发送端口/接收端口组合将< code > '值传递给< code>isolate,然后在isolate开始运行时将该值作为参数传递给< code>_calculate。
这些值是按值传递的,因此传递对象引用并在另一侧更改它不会对发送方产生任何影响。
同样,隔离体不共享任何状态,只共享代码,它们使用 SendPort
/ReceivePort
进行通信,以在主隔离和“计算
”隔离之间来回传递值。
问题内容: 代码 我编写以下代码并将其另存为test.js: 然后,我使用命令在终端中运行它,并返回: 问题 为什么不返回: ? 问题答案: 在Node模块内部,从设计上讲是指模块的对象: 使等于。 换句话说,既不引用全局对象,也不局部变量神奇地成为的属性。 由于不存在,您得到了。
我正在学习Spring MVC,我有以下疑问: 会话范围的目的到底是什么 阅读文档后,我知道这将bean定义的范围限定为HTTP会话。仅在支持web的Spring ApplicationContext上下文中有效。而且每个用户会话都会创建一个新实例。 但具体何时使用?为什么呢?你能举个实际的例子吗? 我知道在Spring,bean的默认作用域是singleton,但在web上下文中bean的作用域
我参加了一个编程比赛,我无法解决问题,问题是: 给定一个n个整数的数组A,我需要计算给定范围内求逆的次数。提供一个整数m,它表示范围的数量,然后是m行,在每一行中给出两个整数li和ri。 我们必须只计算指定范围内的反转,即从li到ri(包括0)的反转(基于0的索引)。 如果 A[i] 两个元素 A[i] 和 A[j] 添加到反演中 反转是: 输入: 输出: 约束: 我知道在整个数组上计算O(nlo
问题内容: 我试图了解在多个JavaConfig上下文中放置注释的正确位置在哪里? 考虑以下情形:我在JPAConfig.java和AppConfig.java中具有服务bean集的JPA配置。然后,在RootConfig.java中编写整个应用程序配置。 我在JPAConfig.java中定义事务管理器,并启用对JPA存储库的扫描- 当这些暴露事务行为时,我将其放到JPAConfig上,并且它可
我医生看起来像 我想拥有超过 100个文档在50到100个之间少于100个文档我尝试使用不同的聚合,但我不知道如何在另一个聚合的计数上进行范围聚合 谢谢你的帮助,
本文向大家介绍dart函数范围,包括了dart函数范围的使用技巧和注意事项,需要的朋友参考一下 示例 Dart函数也可以匿名声明或嵌套声明。例如,要创建嵌套功能,只需在现有功能块中打开一个新功能块 该函数innerFunction现在可以在内部使用,并且只能在内部使用outerFunction。没有其他任何功能可以访问它。 Dart中的函数也可以匿名声明,通常用作函数参数。一个常见的例子是对象so