看了一些Binder机制方面的文章,有一个问题不明白Server端的数据怎么主动上发给Client端?

xqhrs232 2012-03-05 02:05:40
看了一些Binder机制方面的文章,有一个问题不明白Server端的数据怎么主动上发给Client端?
...全文
194 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Utopia 2012-11-08
  • 打赏
  • 举报
回复
调用transact( )的时候有一个参数就是返回包啊
Panghuang 2012-11-08
  • 打赏
  • 举报
回复
服务器端好像无法主动发给客户端的,我个人理解
xqhrs232 2012-03-08
  • 打赏
  • 举报
回复
Android的IPC机制——Binder (1)
http://blog.sina.com.cn/s/blog_40e9d4dd0100xiee.html
xqhrs232 2012-03-08
  • 打赏
  • 举报
回复
Android的IPC机制——Binder (2)
http://blog.sina.com.cn/s/blog_40e9d4dd0100xifg.html

2)服务端代理对象BpBinder

BpBinder是服务端代理对象,即远程对象在当前进程的代理。实际上,它也是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把请求处理完成并返回结果。



xqhrs232 2012-03-08
  • 打赏
  • 举报
回复
没有人在搞这方面的东西吗?
xqhrs232 2012-03-06
  • 打赏
  • 举报
回复
不知道ANDROID下那个SERVICE是这样的例子,那个SERVICE例子可以用来借鉴参考
qthsrs232 2012-03-06
  • 打赏
  • 举报
回复
看来的好好静下心来看看源码,现在真浮躁!!!
lingang1359 2012-03-05
  • 打赏
  • 举报
回复
你研究的问题就是现在很多CP在做的工作:PushService,也就是推送服务,用来推送广告和其他消息。一般来说,Client和Server进行长连接的时候,肯定会有心跳包,我们当时做的时候就是通过在心跳包里面包含请求命令,从而从Server往Client端推送一些广告信息的。
xqhrs232 2012-03-05
  • 打赏
  • 举报
回复
Client端数据下发给Server端可以通过Binder机制的transact( )函数,但Server端的数据怎么主动上发给Client端?不明白!

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧