start()
* —————————–
* | |
* | init() |
* NEW ->– INITIALIZING |
* | | | | ——————<———————–
* | | |auto | | |
* | | \|/ start() \|/ \|/ auto auto stop() |
* | | INITIALIZED –>– STARTING_PREP –>- STARTING –>- STARTED –>— |
* | | | | | |
* | | | | | |
* | | | | | |
* | |destroy()| | | |
* | –>—–<– auto auto | | |
* | | ———<—– MUST_STOP ———————<– | |
* | | | | |
* | \|/ —————————<——————————– ^
* | | | |
* | | \|/ auto auto start() |
* | | STOPPING_PREP ——>—– STOPPING ——>—– STOPPED —->——
* | | ^ | | ^
* | | stop() | | | |
* | | ————————– | | |
* | | | auto | | |
* | | | MUST_DESTROY——<——- | |
* | | | | | |
* | | | |auto | |
* | | | destroy() \|/ destroy() | |
* | | FAILED —->—— DESTROYING —<—————– |
* | | ^ | |
* | | destroy() | |auto |
* | ——–>—————– \|/ |
* | DESTROYED |
* | |
* | stop() |
* —>——————————>——————————