我们有一些服务需要一段时间才能启动(1-2 分钟)。在此过程中,有人可能会请求强制关闭服务(即转换STARTING -> STOPPING
)。查看AbstractService类的源代码,我发现没有调用doStop()
当前状态STARTING
,或者NEW
这意味着在收到停止请求时没有通知底层类。
switch (snapshot.state) {
case NEW:
snapshot = new StateSnapshot(State.TERMINATED);
terminated(State.NEW);
break;
case STARTING:
snapshot = new StateSnapshot(State.STARTING, true, null);
stopping(State.STARTING);
break;
case RUNNING:
snapshot = new StateSnapshot(State.STOPPING);
stopping(State.RUNNING);
doStop();
break;
case STOPPING:
case TERMINATED:
case FAILED:
// do nothing
break;
default:
throw new AssertionError("Unexpected state: " + snapshot.state);
}
由于无论状态如何,我都需要执行一些清理,有没有办法获得有关关机的通知?在子类中使用Service.Listener是个好主意吗?