我正在浏览Android NuPlayer
中的Stagefright
个实现。根据我的理解NuPlayerFactory
依次创建NuPlayerDriver
,它会创建ALooper
和NuPlayer
。我无法理解ALooper
以及它做了什么。我可以看到NuPlayer
中的所有实现都在调用AMessage
调用,如下所示:
NuPlyercpp: new AMessage(kWhatSourceNotify, id());
我不确定它是如何触发NuPlayer::onMessageReceived()
的。读者可以解释一下吗?
答案 0 :(得分:2)
在NuPlayerDriver
构造函数中,您会看到
mPlayer = new NuPlayer;
mLooper->registerHandler(mPlayer);
此ALooper::registerHandler()
使用全局ALooperRoster
来记住处理程序(mPlayer
)和循环器(mLooper
)之间的关系。
在NuPlyer.cpp中,一般模式是:
sp<AMessage> msg = new AMessage(..., id());
....
msg->post();
AMessage::post()
使用ALooperRoster
构造函数中建立的关系调用全局NuPlayerDriver
以0延迟发布消息。