连接所有的生命周期
把所有的事件放在一起,得到完整的生命周期。 只包含一个重启。

把所有的生命周期钩子函数放在一个actor内,我们可以看到不同事件发生的时机。
Listing 4.5 生命周期实例
class LifeCycleHooks extends Actor
with ActorLogging{
System.out.println("Constructor")
override def preStart() {println("preStart")}
override def
postStop() {println("postStop")}
override def
preRestart(reason: Throwable,
message: Option[Any]) {
println("preRestart")
super.preRestart (reason, message)
}
override def postRestart(reason: Throwable) {
println("postRestart")
super.postRestart(reason)
}
def
receive = {
case "restart" => throw
new
IllegalStateException("force restart")
case msg: AnyRef
=> println("Receive")
}
}
接下来的“test”我们触发生命周期的三个事件。 休眠一段时间,确保我们能够看到postStop被调用。
Listing 4.6 测试生命周期实例
val testActorRef = system.actorOf(
Props[LifeCycleHooks], "LifeCycleHooks")
testActorRef ! "restart"
testActorRef.tell("msg", testActor)
expectMsg("msg")
system.stop(testActorRef)
Thread.sleep(1000)
测试输出结果:
Constructor
Start event
preStart
preRestart force restart
Restart event
postStop
Constructor
postRestart force restart
preStart
Receive
postStop
Stop Event
每个actor都经过这个生命周期。 启动,可能重启几次,直到停止或者终止。 preStart 、preRestart 、postRestart 和 postStop 用来初始化、清理状态或者崩溃后控制、恢复其状态。