首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >颤振中的同步平台代码执行

颤振中的同步平台代码执行
EN

Stack Overflow用户
提问于 2021-03-30 09:41:12
回答 1查看 299关注 0票数 0

我正在调用一个本地SDK,它会运行并执行一些API调用,这显然是一项有时间限制的工作。对于90%的工作,我使用回调和方法通道调用双向,这样Dart可以调用Swift,然后Swift可以在完成时调用Dart。

我遇到的问题是,当我想要同步时,等待API响应(或超时)。

我运行了一些测试,因为我本来打算推迟发送FlutterResult,直到Swift回调被击中为止,但是这个会严重降低UI的速度,因为我相信所有的平台调用都是在UI线程上进行的。我模拟了10秒的响应时间,应用程序将完全挂起几秒钟,然后再次响应,如果我发送了其中的几个请求,应用程序将挂起超过10秒。

运行同步平台代码的最佳方式是什么,我有点困惑,因为我不认为平台代码可以从孤立的地方调用。

我也想

  • Get user details
  • 用户按下
  • Show动画,而等待
  • 获取响应并继续前进。

F 214

等待时的动画是当然的一部分,詹克斯。我也不完全确定为什么,因为运行通用CPU工作,它的原生或dart不应该冻结渲染引擎吗?

总之,我唯一能想到的就是:

true

  • Immediately

  • Dart调用平台方法A

  • 将标志AwaitingMethodA设置为

返回FlutterResult,但在Swift命中在回调中设置回调,跳转UI线程并将消息发送回Dart表示完成,这将AwaitingMethodA设置为false

  • Dart代码continues....

如果需要的话,我可以为上面设置一个超时计时器来断开循环。

这种方法是否有什么问题,或者是否有一个更好的同步、有时间限制的平台工作约定?

EN

回答 1

Stack Overflow用户

发布于 2021-03-30 10:27:18

不要在循环中等待-这就是问题所在。

您应该使用Completer类(https://api.flutter.dev/flutter/dart-async/Completer-class.html)。如文档所述-使用Completer,您可以轻松地将基于回调的api转换为未来的基于api的api。

您的代码可能如下所示:

代码语言:javascript
运行
复制
class SdkResultType {
//let's assume this is the type that Sdk will return
}

class MyClass {
   Completer _completer;

   Future<SdkResultType> callSdk() {
      _completer=Completer();
      ///this is where you would call the SDK
      somehowCallTheSDK();
      
      // this is where your code will wait
      return _completer.future;
   }

   // your SDK callback - SDK should call this when completed
   void sdkCallback(SdkResultType  sdkResult) {
      if (!_completer.isCompleted) {
         //this is where you complete the _completer.future, unblocking your mainSdkCall function.
         _completer.complete(sdkResult);
      }
   }

   void mainSdkCall() async {
     //this is whare you wait
     var sdkResult=await callSdk();
     
     // do the rest here
     

   }



}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66868414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档