WEB开发网
开发学院手机开发Android 开发 Android IPC 通讯机制源码分析 阅读

Android IPC 通讯机制源码分析

 2010-05-29 05:27:00 来源:WEB开发网   
核心提示:android.app.testServer.ITestServer.Stub{int mClientCount = 0;testServerClient mClient[];@Overridepublic android.app.testServer.ITestClient.Stub connect(ITestCli
android.app.testServer.ITestServer.Stub

{

int mClientCount = 0;

testServerClient mClient[];

@Override

public android.app.testServer.ITestClient.Stub connect(ITestClient client) throws RemoteException

{

// TODO Auto-generated method stub

testServerClient tClient = new testServerClient(this, client); //为Client创建

mClient[mClientCount] = tClient; //不同的IClient

mClientCount ++;

System.out.printf("*** Server connect client is %d", client.asBinder());

return tClient;

}

@Override

public void receivedData(int count) throws RemoteException

{

// TODO Auto-generated method stub

}

Public static class testServerClient extends android.app.testServer.ITestClient.Stub

{

public android.app.testServer.ITestClient mClient;

public TestServerServer mServer;

public testServerClient(TestServerServer tServer, android.app.testServer.ITestClient tClient)

{

mServer = tServer;

mClient = tClient;

}

public IBinder asBinder()

{

// TODO Auto-generated method stub

return this;

}

}

}

这仅仅是个Service的demo而已,如果添加这个作为system Service还得改一下android代码avoid permission check!

总结:

假定一个Client A 进程与Service B 进程要建立IPC通信,通过前面的分析我们知道他的流程如下:

1:Service B 打开Binder driver, 将自己的进程信息注册到kernel并为Service创建一个binder_ref。

2:Service B 通过Add_Service 将Service信息添加到service_manager进程

3:Service B 的Thread pool 挂起 等待client 的请求

4:Client A 调用open_driver打开Binder driver 将自己的进程信息注册到kernel并为Service创建一个binder_ref

5: Client A 调用defaultManagerService.getService 得到Service

上一页  12 13 14 15 16 17 18  下一页

Tags:Android IPC 通讯

编辑录入:coldstar [复制链接] [打 印]
赞助商链接