gpt4 book ai didi

android - 无法使用 actorSelection 解析 Akka actor

转载 作者:行者123 更新时间:2023-11-30 03:03:03 25 4
gpt4 key购买 nike

您好!首先让我说一下,我们是 Akka 的新成员

问题

我们处于一种奇怪的情况,我们想通过 actorSelection 方法使用其路径来解析一个 actor,但在源代码中的许多情况下都会解析该路径,除了一个特定的。我们在 android 中,我们有一个 Receiver,它激活一个 actor 发送各种消息的过程。有时这一系列消息会完成,但我们不会终止 actor 系统

然后还有一个Receiver正在被调用。在该接收器中,actor 系统 仍然存在,因为它已保存在一个object var 中。使用那个 actor 系统,我们试图解析 actor,但是无论解析超时有多大,都无法找到 actor。 我们不确定 actor 是否已经死亡,但是代码非常干净,所以可能没有在 actor 中抛出任何异常。

注意:一个 actor 的 child 在父 actor 的构造函数中被创建为 private val ...(不确定这是否是最好的策略) )

到目前为止尝试了什么

首先,因为 actorSelection 返回一个 future ,我们使用 Await.result 方法来获取这个 future 的值。其次,我们在许多不同的设备上尝试了各种 android api,并尝试了不同版本的 akka-library。

您是否知道可能会发生什么,或者知道我如何准确了解正在发生的事情,而这个 actor 解析失败了?

编辑#1

由于广播接收器的生命周期,从 BroadcastReceiver 内部尝试从一开始就注定要失败。所以起初 Android 似乎是罪魁祸首,我们必须创建两个服务。一个远程 Service(粘性),用作存储 ActorSystem 的进程。但是因为从 BroadcastReceiver 内部绑定(bind)到服务是不可能的,我们不得不创建一个 IntentService 来充当 BroadCastReceiver 和 IntentService 之间的中介。
不幸的是,结果还是一样。一切正常,除了 actor 无法解析。

编辑 #2

我们对无法解决的 actor 进行了死亡监视,但结果仍然相同,我们无法收到任何 Terminated 消息。在上述失败尝试之后,我们尝试创建一个全新的项目,删除所有不必要的代码。这种努力的结果是错误消失了!(可能)。因此,我们必须得出结论,我们的一些原始代码首先应归咎于被破坏的 Actor 。

最佳答案

你的问题缺少很多有用的信息(例如关于哪个 Actor 在哪个路径查找其他 Actor 路径),但我的主要怀疑是你在父级中使用 Await.result要查找的 actor 的名称,这会阻止消息发送到该 actor(因为每个父级都需要在幕后转发消息——这在 2.3.0 中得到了改进)。

关于android - 无法使用 actorSelection 解析 Akka actor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22275631/

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