前面我们已经写好了bindercase的各种实现了,把它编译成.so就ok啦。
下面把这个case 服务给跑起来
A进程
main_test.cpp
#include <sys/types.h>
#include <unistd.h>
#include <cutils/log.h>
#include <binder/IServiceManager.h>
#include <binder/ProcessState.h>
#include <binder/IPCThreadState.h>
#include "../libTest/ITest.h"
using namespace android;
int main(int argc, char** argv)
{
sp<ProcessState> proc(ProcessState::self());
sp<IServiceManager> sm = defaultServiceManager();
LOGI("ServiceManager: %p", sm.get());
TestService::instantiate(); //这里加入serviceManager中
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
return 0;
}
就这么简单, TestService::instantiate(); 这个instantiate()方法在前面有实现可以看看,其他的代码都是模型,具体含义可以去查查。
接下来就是使用了
B进程
client_test.cpp
#include <sys/types.h>
#include <unistd.h>
#include <cutils/log.h>
#include <binder/IServiceManager.h>
#include <binder/ProcessState.h>
#include <binder/IPCThreadState.h>
#include "../libTest/ITest.h"
using namespace android;
int main()
{
sp<IBinder> binder;
static sp<ITest> sTestManager = NULL;
// if(sTestManager != NULL)
// return 0;
sp<IServiceManager> sm = defaultServiceManager();
do {
binder = sm->getService(String16("test.service"));
if (binder == 0) {
printf("TestService not published, waiting...");
usleep(500000); // 0.5 s
}
} while(binder == 0);
printf("TestService get succ...");
if(sTestManager == NULL){
sTestManager = interface_cast<ITest>(binder);
}
sTestManager->getTest();
sTestManager->setTest();
return 0;
}
这个也很简单,获取bp对象,使用pb对象的方法,bp会和bn交互。
ok case就写到这里了。