gpt4 book ai didi

flutter - 如何获得对已经运行的隔离的引用?

转载 作者:行者123 更新时间:2023-12-04 13:24:55 27 4
gpt4 key购买 nike

在 Flutter 应用程序启动期间,您如何获得对已经运行的隔离的引用?
想象一个在 Isolate 中执行所有工作的 Futter 应用程序。即使将应用程序置于后台,Isolate 也可以运行近一个小时(顺便说一句,到目前为止工作正常)。如果在隔离已经运行时再次启动应用程序,则会出现问题,从而导致应用程序挂起。
所以问题是,如何检测隔离是否已经在运行,以及如何处理它?

最佳答案

由于我的评论没有得到提问者的回复,我在这里提供了一个更详细的建议。请随时发表评论,我会根据反馈进行更新。
首先,尝试简单地遵循教程:https://medium.com/flutter/executing-dart-in-the-background-with-flutter-plugins-and-geofencing-2b3e40a1a124
其次,IsolateNameServer似乎很有希望。看看它的实现,我们看到:

class IsolateNameServer {

...
static SendPort? lookupPortByName(String name) {
...
return _lookupPortByName(name);
}

...

static SendPort? _lookupPortByName(String name)
native 'IsolateNameServerNatives_LookupPortByName';
static bool _registerPortWithName(SendPort port, String name)
native 'IsolateNameServerNatives_RegisterPortWithName';
static bool _removePortNameMapping(String name)
native 'IsolateNameServerNatives_RemovePortNameMapping'
}
和 C++ 代码: https://blog.weghos.com/flutter/engine/flutter/lib/ui/isolate_name_server/isolate_name_server_natives.cc.html
...
Dart_Handle IsolateNameServerNatives::LookupPortByName(
const std::string& name) {
auto name_server = UIDartState::Current()->GetIsolateNameServer();
if (!name_server) {
return Dart_Null();
}
Dart_Port port = name_server->LookupIsolatePortByName(name);
if (port == ILLEGAL_PORT) {
return Dart_Null();
}
return Dart_NewSendPort(port);
}
...
因此,它不是在 Dart 中实现的,而是本地实现的,所以可能后台隔离可以注册自己,主隔离可以使用它来找到它。
尝试一下,如果它不起作用,请发表评论,我会更新。

关于flutter - 如何获得对已经运行的隔离的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69067068/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com