没有合适的资源?快使用搜索试试~ 我知道了~
Android系统的Binder机制之二——服务代理对象(1).docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 201 浏览量
2022-07-06
20:02:37
上传
评论
收藏 43KB DOCX 举报
温馨提示
试读
11页
Android系统的Binder机制之二——服务代理对象(1)
资源推荐
资源详情
资源评论
Android 系统的 Binder 机制之二——服务代理对象(1)
1 / 11
Android 系统的 Binder 机制之二——服务代理对象(1)
� 上 文 《 Android 系 统 的 Binder 机 制 之 一 — —Service
Manager》 我 们 学 习 了 Service Manager 在 Android Binder
中 的 作 用 — — 服 务 ( Service) 注 册 , 服 务 ( Service) 查 询
的 功 能 。 本 文 我 们 一 起 学 习 服 务 ( Service) 在 客 户 端 中 的
代 理 机 制 。 重 点 介 绍 其 核 心 对 象 BpBinder。
1、 服 务 代 理 的 原 理
如 下 是 客 户 端 请 求 service 服 务 的 场 景 :
1、 首 先 客 户 端 向 Service manager 查 找 相 应 的 Service。 上
文 《 Android 系 统 的 Binder 机 制 之 一 — —Service Manager》
有 比 较 详 细 的 介 绍 。 注 意 客 户 端 和 Service 可 能 在 两 个 不 同
的 进 程 中 。
2、 Android 系 统 将 会 为 客 户 端 进 程 中 创 建 一 个 Service 代 理 。
下 文 将 详 细 介 绍 该 创 建 过 程 。
3、 客 户 端 视 角 只 有 Service 代 理 , 他 所 有 对 Service 的 请 求
都 发 往 Service 代 理 ,然 后 有 Service 代 理 把 用 户 请 求 转 发 给
Service 本 身 。Service 处 理 完 成 之 后 ,把 结 果 返 回 给 Service
代 理 ,Service 代 理 负 责 把 处 理 结 果 返 回 给 客 户 端 。注 意 客 户
端 对 Service 代 理 的 调 用 都 是 同 步 调 用 ( 调 用 挂 住 , 直 到 调
用 返 回 为 止 ) , 这 样 客 户 端 视 角 来 看 调 用 远 端 Service 的 服
Android 系统的 Binder 机制之二——服务代理对象(1)
2 / 11
务 和 调 用 本 地 的 函 数 没 有 任 何 区 别 。这 也 是 Binder 机 制 的 一
个 特 点 。
2、 Android 进 程 环 境 — —ProcessState 类 型 和 对 象
在 Android 系 统 中 任 进 程 何 , 要 想 使 用 Binder 机 制 , 必
须 要 创 建 一 个 ProcessState 对 象 和 IPCThreadState 对 象 。
当 然 如 果 Android 进 程 不 使 用 Binder 机 制 ,那 么 这 两 个 对 象
是 不 用 创 建 的 。 这 种 情 况 很 少 见 , 因 为 Binder 机 制 是 整 个
Android 框 架 的 基 础 , 可 以 说 影 响 到 Android 方 方 面 面 。 所
以 说 了 解 这 两 个 对 象 的 作 用 非 常 重 要 。
台 湾 的 高 焕 堂 先 生 一 片 文 章 《 认 识 ProcessState 类 型 和
对 象 》, 可 以 在 我 的 博 文 《 ( 转 ) 高 焕 堂 — —Android 框 架 底
层 结 构 知 多 少 ? 》 中 找 到 。 可 以 先 通 过 这 篇 文 章 对
ProcessState 进 行 一 个 大 概 了 解 。
ProcessState 是 一 个 singleton 类 型 , 一 个 进 程 只 能 创 建
一 个 他 的 对 象 。 他 的 作 用 是 维 护 当 前 进 程 中 所 有 Service 代
理 ( BpBinder 对 象 ) 。 一 个 客 户 端 进 程 可 能 需 要 多 个
Service 的 服 务 ,这 样 可 能 会 创 建 多 个 Service 代 理( BpBinder
对 象 ) , 客 户 端 进 程 中 的 ProcessState 对 象 将 会 负 责 维 护 这
些 Service 代 理 。
我 们 研 究 一 下 创 建 一 个 Service 代 理 的 代 码 :
Android 系统的 Binder 机制之二——服务代理对象(1)
3 / 11
sp<IBinder> ProcessState::getStrongProxyForHandle(int32_t
handle)
{
sp<IBinder> result;
AutoMutex _l(mLock);
handle_entry* e = lookupHandleLocked(handle);
if (e != NULL) {
// We need to create a new BpBinder if there isn't
currently one, OR we
// are unable to acquire a weak reference on this current
one. See comment
// in getWeakProxyForHandle() for more i n f o about this.
IBinder* b = e->binder;
if (b == NULL || !e->refs->attemptIncWeak(this)) {
b = new BpBinder(handle);
e->binder = b;
if (b) e->refs = b->getWeakRefs();
result = b;
} else {
// This little bit o f n a styness is to allow us to
add a primary
// reference to the remote proxy when this team
doesn't have one
剩余10页未读,继续阅读
资源评论
oligaga
- 粉丝: 50
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功