在看程序代码时,疑惑remote()返回的明明是Ibinder类,而Ibinder类中的transact是纯虚函数,没有函数体。
其实原因主要在 sp<IServiceManager> sm = defaultServiceManager();这行程序中。
在defaultServiceManager();中有一下语句:
gDefaultServiceManager = interface_cast<IServiceManager>(ProcessState::self()->getContextObject(NULL));
其中ProcessState::self()->getContextObject(NULL)返回的是BPbinder,而interface_cast<IServiceManager>中有以下内容:在asInterface()函数内有以下语句:
if (intr == NULL)