使用actorSelection无法解析Akka actor

时间:2014-03-08 22:03:57

标签: android akka actor

您好!我先说我们是Akka的新人

问题

我们处于一种奇怪的情况,我们希望使用actorSelection方法使用其路径解析一个actor ,但是在源代码内的路径很多时候都会解决这个问题,除了特定的一个。 我们在android中,我们有一个Receiver激活一个发送各种消息的actor的过程。在某些时候,这一系列的消息已经完成,但我们 终止了演员系统

然后还有另一个正在被呼叫的接收器。在该接收器内部, actor系统仍然存在,因为它已保存在对象var 中。使用该actor系统,我们正在尝试解析actor,但无论解析超时有多大,都无法找到actor。 我们不确定演员是否已经死亡,但代码非常干净,所以可能没有异常被抛出该演员。

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

到目前为止已经尝试了什么

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

你知道可能会发生什么,或者我怎么能知道究竟发生了什么,这个演员的决心失败了?

编辑#1

由于广播接收器的生命周期,从BroadcastReceiver内部尝试从一开始就注定要失败。所以起初Android似乎是罪魁祸首,我们必须创建两个服务。远程Service(粘性)用作存储ActorSystem的进程。但是因为从BroadcastReceiver内部绑定到服务是不可能的,我们不得不在BroadCastReceiver和IntentService之间创建一个IntentService。 不幸的是,结果仍然相同。一切都很好,除了演员无法解决的事实..

编辑#2

我们在演员身上放置了无法解决的死亡观察,但结果仍然相同,我们无法收到任何已终止的消息。 在上述失败尝试之后,我们尝试创建一个修剪了所有不必要代码的整个新项目。这种努力的结果是错误消失了!(可能)。因此,我们必须得出结论,我们的一些原始代码首先要归咎于被摧毁的演员。

1 个答案:

答案 0 :(得分:1)

你的问题是缺少很多有用的信息(例如关于哪个路径的哪个演员查找哪个其他演员路径),但我的主要怀疑是你在演员的父母中使用Await.result是查找,阻止消息传递给该演员(因为每个父母都需要转发消息 - 这在2.3.0中得到了改进)。