Android消息处理
来源:互联网 发布:电脑锣编程软件有什么 编辑:程序博客网 时间:2024/05/21 04:42
Alooper负责创建线程
Ahandler负责创建Amessage消息并透过ALooperRoster传给Alooper放到messagequeue
Alooper的run方法不停执行,从messagequeue里面获取第一个消息,通过ALooperRoster再返回给Ahandler处理。
ALooperRoster负责将所有消息区分开然后再丢回给对应的Ahandler来处理
struct CodecBase : public AHandler
struct ACodec: public CodecBase
//MediaCodec.cpp
mCodec = new ACodec;
if (mIsVideo) {
if (mCodecLooper == NULL) {
mCodecLooper = new ALooper;
mCodecLooper->setName("CodecLooper");
mCodecLooper->start(false, false, ANDROID_PRIORITY_AUDIO);
}
mCodecLooper->registerHandler(mCodec);
} else {
mLooper->registerHandler(mCodec);
}
mLooper->registerHandler(this);
在实例化MediaCodec对象的时候,AP会带一个ALooper,初始化给mLooper.
在MediaCodec init()的时候,若是Video,则会创建一个ALooper给mCodec使用。
若是Audio,则使用跟MediaCodec同一个ALooper.
另外MediaCodec对外标准接口,则是使用的AP的thread.
对于每一个thread,其消息在loop里面顺次执行,前一个执行完,后一个才能继续。有时候消息响应慢,可以从这个角度来分析,是不是前一个消息被卡住了。
Status_tAlooper::start(priority)
{
mThread =newLooperThread();
err = mThread->run(priority);
}
Alooper::handler_idAlooper::registerHandler(handler)
{
return gLooperRoster.registerHandler(this,handler);
}
Alooper::handler_idALooperRoster::registerHandler()
{
handler->setID(handlerID); //给每个Ahandler分配一个handler_id,从0开始++
}
//该loop当线程run的时候会一直执行
BoolAlooper::loop()
{
event = *mEventQueue.begin();
event.mMessage->deliver();
}
void AMessage::deliver()
{
sp<AHandler> handler = mHandler.promote();
handler->deliverMessage(this);
}
//sample code
{
msg =newAmessage(uint32_t what, const sp<const AHandler> &handler);
msg->post();
}
Void Amessage::post()
{
sp<ALooper> looper = mLooper.promote();
looper->post();
}
Void MediaCodec::onMessageReceived(const sp<AMessage> &msg)
{
switch(msg->what());
}
- Android消息队列处理消息
- Android 消息处理机制
- Android消息处理系统
- Android消息处理机制
- Android消息处理机制
- Android消息处理探秘
- Android消息处理探秘
- android消息处理机制
- android 消息处理机制
- Android消息处理机制
- android消息处理笔记
- Android异步消息处理
- Android消息处理机制
- Android 触摸消息处理
- Android消息处理机制
- Android消息处理机制
- android消息处理
- Android按键消息处理
- MAC常用功能tip
- oracle还原
- 【BZOJ 3527】 [Zjoi2014]力
- STL list的简单实现及list迭代器失效问题
- 一个拟合曲线趋势的算法
- Android消息处理
- INFOQ的ARCHSUMMIT大会对我的采访
- 如何解决 CentOS系统下 使用localhost无法连接数据库
- 类继承
- lca(HDU 4718,The LCIS on the Tree)
- 动态规划,最长回文子序列(java实现),输入character,算法应该返回carac
- Ubuntu16.04下重启mysql和apach2
- CSS3 边框
- Keras下GPU/CPU模式切换