ACodec有一个BaseState和派生出来的其他State. FlushingState,ExecutingState等,用于处理各种消息。
struct ACodec::BaseStage : public AState
struct ACodec: public AHierarchicalStateMachine[AHierarchicalStateMachine用于将收到的消息传递给哪个state]
//AHandler.cpp
void AHandler::deliverMessage(const sp<AMessage> &msg)
{
onMessageReceived(msg);
...
}
//ACodec.h
virtual void onMessageReceived(const sp<AMessage> &msg)
{
handleMessage(msg);
}
void AHierarchicalStateMachine::changeState(const sp<AState> &state)
{
sp<AState> cur = mState;
cur = state;
}
void AHierarchicalStateMachine::handleMessage(const sp<AMessage> &msg)
{
sp<AState> cur = mState;
while(cur != NULL &&