/// <summary>
        /// 反初始化
        /// </summary>
        public override void Uninitialize()
        {
            _stateHistory = null;

            _state.Release();
            _state = null;

            _switchMediatorData.Release();
            _switchMediatorData = null;

            for (int i = 0; i < _mediator.Count; i++)
            {
                MediatorData data = _mediator[i];
                if (data.Mediator == null)
                {
                    continue;
                }

                JW.Common.Log.LogE("UIStateService.Uninitialize error - mediator not destroy {0}", data.Mediator.GetType().FullName);
            }

            _mediator.Release();
            _mediator = null;
        }
        //切换状态
        private void SwitchState(int changeType, string oldStateName, string newStateName, object stateParam)
        {
            // 新状态信息应用
            if (string.IsNullOrEmpty(newStateName))
            {
                JW.Common.Log.LogE("UIStateService.ChangeState error stateName");
                return;
            }

            // 通知Mediator
            _switchMediatorData.Clear();
            for (int i = 0; i < _mediator.Count; i++)
            {
                MediatorData mediatorData = _mediator[i];
                if (mediatorData.Mediator == null)
                {
                    continue;
                }

                bool oldState = mediatorData.IsBelongsState(oldStateName);
                bool newState = mediatorData.IsBelongsState(newStateName);
                if (oldState == newState)
                {
                    if (newState)
                    {
                        _switchMediatorData.Add(new KeyValuePair <UIMediator, int>(mediatorData.Mediator, 0));
                    }
                    continue;
                }

                if (oldState)
                {
                    _switchMediatorData.Add(new KeyValuePair <UIMediator, int>(mediatorData.Mediator, 1));
                }

                if (newState)
                {
                    _switchMediatorData.Add(new KeyValuePair <UIMediator, int>(mediatorData.Mediator, 2));
                }
            }
            // out
            for (int i = 0; i < _switchMediatorData.Count; i++)
            {
                KeyValuePair <UIMediator, int> data = _switchMediatorData[i];
                if (data.Value == 1)
                {
                    data.Key.ChangeState(changeType, false, oldStateName, newStateName, null);
                }
            }

            if (Hook != null)
            {
                Hook(1, changeType, oldStateName, newStateName, stateParam);
            }


            //清理资源
            if (StateService.IsValidate())
            {
                AssetService.GetInstance().ClearUIStateCache(_stateHistory);
            }

            for (int i = 0; i < _switchMediatorData.Count; i++)
            {
                KeyValuePair <UIMediator, int> data = _switchMediatorData[i];
                if (data.Value == 2)
                {
                    data.Key.ChangeState(changeType, true, oldStateName, newStateName, stateParam);
                }
            }

            if (Hook != null)
            {
                Hook(2, changeType, oldStateName, newStateName, stateParam);
            }

            //stay
            for (int i = 0; i < _switchMediatorData.Count; i++)
            {
                KeyValuePair <UIMediator, int> data = _switchMediatorData[i];
                if (data.Value == 0)
                {
                    data.Key.RefreshState(changeType, oldStateName, newStateName, stateParam);
                }
            }

            if (Hook != null)
            {
                Hook(0, changeType, oldStateName, newStateName, stateParam);
            }

            JW.Common.Log.LogD("<color=yellow>UIStateService</color>--->Switch UI State from {0} to {1}<----", oldStateName, newStateName);
        }