android - 函数挂起 UI
问题描述
我正在使用 Dart、AndroidStudio、Flutter
我需要调用一个函数来散列我的密码。哈希函数需要时间来执行。代码应该在印刷机上运行。功能是:
String getHash(Stirng input)
我称之为如下:
onPressed:{
newPass=getHash(currentPass);
}
它阻塞了 UI 线程。该函数来自某些 API,因此无法编辑。
我做了一个async
方法并调用getHash()
了async
函数。
Future<String> asyncMethodToGetHash(String input) async{
return await geHash(input);
}
但它仍然阻塞了 UI 线程。我应该如何调用它以使 UI 不被阻塞?
解决方案
您可以使用compute()
颤振提供的方法,该方法将在单独的隔离中运行代码(相当于线程的飞镖)。像这样的东西:
static String getHash(String input){
return hash(input); // your code to calculate hash here.
}
String computeHash(String input){
return await compute(getHash, input);
}
请记住,您传递给compute()
方法的函数必须是静态的,并且只能接受一个参数。由于隔离不共享内存,因此函数中使用的每个变量都必须作为参数传递。因此,如果您必须将多个方法传递给函数,则必须制作一个参数列表。
推荐阅读
- r - 选择命令的未知结果
- dns - OVH VPS 不允许连接
- spring-boot - Spring security 忽略了我的 authenticationEntryPoint
- logging - 将自己的打印行添加到 pytest 装饰输出
- node.js - npm install 作为 TeamCity 中的构建步骤
- firefox-addon-webextensions - 获取一个 Firefox 插件来检测和模仿检查 Apple Pay 支持的尝试
- apache-spark - Emr Notebook - 会话未激活
- javascript - 为什么 vue.js 计算得到未定义
- spring - 如果数据不是每分钟轮询一次,SimpleMeterRegistry 会清除数据
- neo4j - 删除最后n个关系neo4j