大家新年好:
  这两天再看android中Acodec.cpp中的代码,对google这样的代码层次不是很明白,请指点写,谢谢!
Acodec.cpp中把每个状态单独写成一个类,然后在代码中调用这个类。
定于如下:
 sp<UninitializedState> mUninitializedState;
    sp<LoadedToIdleState> mLoadedToIdleState;
    sp<IdleToExecutingState> mIdleToExecutingState;
    sp<ExecutingState> mExecutingState;
    sp<OutputPortSettingsChangedState> mOutputPortSettingsChangedState;
    sp<ExecutingToIdleState> mExecutingToIdleState;
    sp<IdleToLoadedState> mIdleToLoadedState;
    sp<FlushingState> mFlushingState;举例说明每个类的写法:
struct ACodec::IdleToLoadedState : public ACodec::BaseState {
    IdleToLoadedState(ACodec *codec);protected:
    virtual bool onMessageReceived(const sp<AMessage> &msg);
    virtual void stateEntered();    virtual bool onOMXEvent(OMX_EVENTTYPE event, OMX_U32 data1, OMX_U32 data2);private:
    DISALLOW_EVIL_CONSTRUCTORS(IdleToLoadedState);
};使用是这样的:
void ACodec::ExecutingToIdleState::changeStateIfWeOwnAllBuffers() {
    if (mCodec->allYourBuffersAreBelongToUs()) {
        CHECK_EQ(mCodec->mOMX->sendCommand(
                    mCodec->mNode, OMX_CommandStateSet, OMX_StateLoaded),
                 (status_t)OK);        CHECK_EQ(mCodec->freeBuffersOnPort(kPortIndexInput), (status_t)OK);
        CHECK_EQ(mCodec->freeBuffersOnPort(kPortIndexOutput), (status_t)OK);        mCodec->changeState(mCodec->mIdleToLoadedState);
    }
}我想问的是: 这样每个状态单独定义成一个类,然后切换状态就变成了在多个类中相互切换。 这样做比 在一个大类中定义几个函数,然后在函数中相互切换,哪里有优势,谢谢!