停止事件

下一个我们要讨论的生命周期事件是停止事件。 我们会尽快讲解重启事件,因为重启的钩子函数依赖启动和停止的钩子函数。 停止事件表示actor生命周期的结束,只能发生一次。 actor可以通过ActorSystem或者ActorContext的stop函数来停止, 或者发送PoisonPill消息给actor来停止。

停止actor

在actor终止之前postStop钩子函数会被调用。 当actor进入终止状态,就再也不能处理消息了。 postStop函数跟preStart函数对应。

    override def postStop() {
        println("postStop")  // do some work
    }

通常这个钩子函数跟preStart对应,释放在preStart函数中申请的资源, 或者存储状态信息,如果后面的actor需要这些信息的话。 终止的actor跟它的引用断开了。 断开的引用会被重定向到actor系统的deadLetters, deadLetters是一个特殊的引用,用来接收所有发送给终止actor的消息。