android 底层的录制和播放都会用到ALooper,AHandler和AMessage,这个和上一篇讲的looper有什么不一样呢?其实作用是差不多的,只是实现的方式不一样而已。
1、looper线程的创建
status_t ALooper::start(
bool runOnCallingThread, bool canCallJava, int32_t priority) {
if (runOnCallingThread) { //如果传入的参数为true,就会使用当前的线程作为looper线程,否则下面会再创建一个线程作为looper线程
{
Mutex::Autolock autoLock(mLock);
if (mThread != NULL || mRunningLocally) {
return INVALID_OPERATION;
}
mRunningLocally = true;
}
do {
} while (loop());
return OK;
}
Mutex::Autolock autoLock(mLock);
if (mThread != NULL || mRunningLocally) {
return INVALID_OPERATION;
}
mThread = new LooperThread(this, canCallJava);
status_t err = mThread->run(
mName.empty() ? "ALooper" : mName.c_str(), priority);
if (err != OK) {
mThread.clear();
}
return err;
}
调用ALooper的start()函数后,就会进入loop,也就是一直循环调用loop()函数,如果传入的第一个参数是true,就会让当前线程变成looper线程,否则会创建一个新的looper线程。
virtual bool threadLoop() {
return mLooper->loop();
}
其实就是创建一个普通线程,然后