看了一些Binder机制方面的文章,有一个问题不明白Server端的数据怎么主动上发给Client端?
解决方案 »
- pc手机助手的开发
- 如何在android系统中,获得客户端Mac地址
- 被home键隐藏的APP如何把自己显示到前台?
- android连接.net的webservirce问题(报IOException)
- 关于系统自带软键盘,键入字符后的显示问题。
- 布局奇怪的效果?!各位能帮忙看看吗?
- Android 2.2 对硬件配置的要求到底有多高?
- [菜鸟求指导]怎样把dataIputStream直接赋给dataOutputStream呢
- Activity下使用Fragment和View的有什么不同?
- 安卓开发不能读取数据库的疑问
- 调用AudioRecord录音,得到的音频文件频率相差出入很大.
- 新手求救,如何将文字绘制在这两个三角形里...
http://blog.sina.com.cn/s/blog_40e9d4dd0100xifg.html2)服务端代理对象BpBinderBpBinder是服务端代理对象,即远程对象在当前进程的代理。实际上,它也是Binder通信存在于客户端的进程,它实现了IBinder接口,它的transact函数的实现如代码清单3-47所示。代码清单3-47 BpBinder::transact的实现status_t BpBinder::transact(
uint32_t code, const Parcel& data, Parcel
reply, uint32_t flags)
{
// Once a binder has died, it will never come back to life.
if (mAlive) {
status_t status = IPCThreadState::self()->transact(
mHandle, code, data, reply, flags);
if (status == DEAD_OBJECT) mAlive = 0;
return status;
}
return DEAD_OBJECT;
}
该函数的参数分别为请求的ID号、请求的参数、返回的结果、额外的标识(通常为0)。它实际上只是简单地调用了IPCThreadState::self()的transact函数,将请求通过内核模块发送给了服务端,服务端处理完请求之后,沿原路返回结果给调用者。注意 transact方法是同步方法,将会挂起客户进程的当前线程,直到Service把请求处理完成并返回结果。
http://blog.sina.com.cn/s/blog_40e9d4dd0100xiee.html