ProcessState::self()->startThreadPool();
1、startThreadPool()的主要作用是:(ProcessState.cpp) 调用spawnPooledThread( ?true )
2、spawnPooledThread这个函数里面主要作用是:(ProcessState.cpp) 启动一个线程sp<Thread> t = ?new ?PoolThread(isMain); t->run(buf);? ? ? ? //最终就会执行PoolThread类的threadLoop函数了。
3、PoolThread继承自Thread,里面有个run函数,主要作用是:(system\core\libutils\Threads.cpp) 调用函数createThreadEtc 或 androidCreateRawThreadEtc 创建线程_threadLoop
4、_threadLoop里面主要作用是:(system\core\libutils\Threads.cpp) 调用自己的threadLoop(self->threadLoop()),就是2步骤中的PoolThread里面的一个函数threadLoop()
5、threadLoop()函数里面主要作用是:(ProcessState.cpp) 调用IPCThreadState::self()->joinThreadPool(mIsMain),mIsMain第一次是true,代表主线程
6、用户线程被创建后,调用joinThreadPool: IPCThreadState::self()->joinThreadPool(mIsMain)
joinThreadPool函数主要作用是:(IPCThreadState.cpp) 调用talkWithDriver(),其中会调用ioctl(mProcess->mDriverFD, BINDER_WRITE_READ, &bwr) 驱动里面会调用wait_event_interruptible,等带客户端请求。
退出循环: if ?(result == TIMED_OUT && !isMain) { ? ? ? break ; } 循环结束条件是TIMED_OUT,或者不是主线程,或者如下: while ?(result != -ECONNREFUSED && result != -EBADF) ———————————————— ?
|