我们有一些服务需要一段时间才能开始(1-2分钟)。在此过程中,有人可能会要求强制关闭服务(即转换STARTING -> STOPPING
)。查看AbstractService类的来源,我发现当当前状态为STARTING
或NEW
时,没有呼叫doStop()
,这意味着在收到停止请求时不会通知基础类。番石榴服务停止状态正在启动
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是个好主意吗?
哎呦。只要我发布,我意识到你说,底层类没有通知,因为'doStop'没有被调用。所以我想我的答案可能基本上就是我答案的第二段。 :-) –
你可以编辑你的答案,并删除第一段 –
是的,但我觉得那里还有一些有用的信息。 –