没有合适的资源?快使用搜索试试~ 我知道了~
MediaPlayerService Binder机制源码分析及详解
需积分: 11 7 下载量 59 浏览量
2013-12-31
09:07:40
上传
评论
收藏 604KB DOC 举报
温馨提示
试读
26页
本文档详细解说了从MediaPlayerService的创建,到其Binder机制的实现,BnMediaPlayerService与BpMediaPlayerService之间的关系,Binder客户端如何与服务端进行通信。希望对你们有所帮助。
资源推荐
资源详情
资源评论
Mediaplayer Binder 机制学习
摘要:本文档主要讲解并说明 中 机制的相关知识,另本人查阅资料
时,由于内容过多而导致无法理清思路,同时为后来者提供研究思路。本文档主要参考网
上资料进行总结,如果有兴趣可以查阅如下资料:
! "
MediaPlayerService 的诞生
# 的入口函数在如下文件中:
、创建一个 $# 对象,并将其赋予给对象指针 。 其实是一个模板
类,其是强指针及弱指针的实现类,这一块我们可以不关注,其主要是为了智能指针而存
在的,智能指针是 % 自我开发的一种能够自动维护对象引用计数的技术,以自动释
放内存,可将 &$#'等价于 $#(。
、 获 取 一 个 )# 对 象 指 针 , 这 边 可 以 跟 踪 查 找
*!#+,的调用,最终返回的结果可等价于如下:
*-...#./ 源码如下:
0+010((0,
2
0000&$#'0+$#*+,,3
0000&)#'0040*!#+,3
567)+8#09810+,,3
如下四行代码性质相同,这里之分析 $#
0000%!:+,3
0000$#+,3
;#+,3
%!$#+,3
0000$#*+,<'=$+,3
0000)$;=#*+,<'>=$+,3
?
@*!#040*/&)#'+
0000000000000000$#*+,<';A6>+BC55,,3
等价于
@*!#040*/&)#'+
00000000000000000+,,3
最终使用 */ 将 转成 )# 对象并返回。
如何转换的可关注如下:
000、加载多媒体相关的服务,并由 # 进行统一管理。
000、消息循环 操作。
如上只是大概介绍了一下相关的 函数中主要处理了哪些操作,而后我们关注一下细
节方面。首先
一、sp<ProcessState> proc(ProcessState::self());
说明:在 % 中 $# 是客户端和服务端公共的部分,作为 通信的
基础,$# 是一个 类,每个进程只有一个对象,这个对象负责打开
驱动,建立线程池,让其进程里面的所有线程都能够通过 通信。与之相关
的是 )$;=#,每个线程都有一个 )$;=# 实例登记在 5!A 线程的上
下文附属数据中,主要负责 的读取,写入和请求处理框架。)$;=# 在
构造的时候获取进程的 $# 并记录在自己的成员变量保存在 $ 中,通
过 $ 可以获得 句柄。
、在构造函数中对 设备进行了 操作,并获得描述符 *,并将 * 映射为内
存。构造函数如下:
*-!))*
DE0@F;5%GF/F=%/)B=FG:%;F+)B=FG:%;F,0
DE0)$5FFB=/F=%/)B=FG:%;F+)B=FG:%;F10B%F,0
这两个宏定义一个是声明,一个是实现,声明中声明了 * 接口,实现中对其进
行了实现,最终会发现,*/ 其实就是 了一个 # 对象,
并将参数中的对象赋给它,然后返回。
构造完成后就返回,改行代码执行完成。
这里主要做了两件事:
打开 设备,这样就可以与内核的 机制有了交互的通道。
映射 * 到内存,设备的 * 传进去之后,估计这块内存是和 设备共享的。
二、sp<IServiceManager> sm = defaultServiceManager();
*!#+,实现如下:
、这里 $#*+,返回的值其实就是第一行穿件的 $# 对象。
$#$#+,
00000@:@+/+,,
000010H#+%$/:%)5F@,
000010;A+*,
000010;A;-:!+BC55,
000010;AC@+BC55,
000010=$#+*,
000010=$#I+,
2
0000*0+@:@0'40,02
000000000JJJ0)100!000E0E0*00
00000000000+000!0000-0!
000000000,
D*0KE+L%HF/M)B/)$;,
000000000001000!-0*0!0000
0 0 0 0 0 0 0 0H#040+10)B@FG/H/#)NF10$G6=/GF%@10%$/$G)H%=F0O
%$/B6GF#FGHF10@:@10,3
00000000*0+H#0440%$/:%)5F@,02
0000000000000((
000000000000567F+8C00*0!0000.
8,3
000000000000+@:@,3
000000000000@:@040<3
00000000?
D
00000000@:@040<3
D*
0000?
&)#'0*!#+,
2
0000*0+@*!#0K40BC55,0!0@*!#3
0000
00002
00000000%!!A0/+@*!#5-,3
00000000*0+@*!#0440BC55,02
000000000000@*!#040*/&)#'+
0000000000000000$#*+,<';A6>+BC55,,3
00000000?
0000?
0000
0000!0@*!#3
?
;A6>+BC55,,该接口只进行了 #$A:L+,调用。
我们看一下 #$A:L+,接口的实现:
查看如上标红的代码:
在 调 用 #$A:L 时 , 传 入 的 参 数 为 , 而 后 嗲 用
-!L5- 来 查 找 该 索 引 的 结 构 体 变 量 , 该 接 口 其 实 就 是 从 一 个
/ 的 H 变量中进行查找,刚开始进入由于 H 成员为 ,那么就会
创 建 一 个 / 的 变 量 , 并 且 / 的 值 都 赋 为 BC55 。 如 下 是
/ 的结构。
、而后就会新建一个 对象,并初始值传入 ,在进行返回。
&)'0$##$A:L+/0,
2
0000&)'0!3
0000%!!A0/+5-,3
0000/(0040-!L5-+,3
0000*0+0K40BC55,02
000000000M0000000*00P0!0106G0
0 0 0 0 0 0 0 000!00 I!00-0*00 0!00 0#
0000000000M-$A:L+,0*00*0!0
00000000)(0040<'3
00000000*0+0440BC550OO0K<'*<')M-+,,02
0000000000000400+,30
000000000000<'0403
000000000000*0+,0<'*040<'M-G*+,3
000000000000!0403
00000000?002
0000000000000=000*00000!0000
0000000000000*0000A0000P00
0000000000000!00000000!
000000000000!*/+,3
000000000000<'*<'M-+,3
00000000?
0000?
0000!0!3
?
!0/02
0000000000000)(03
0000000000000G*-*/(0*3
000000?3
* 是一个为对象引用计数的一个对象(可不用太过关注,不影响)。
位置在 *-.... 中,构造函数如下:
这边调用 )$;=#*+,,其实现如下:
B:=5#0=050#0线程本地存储 在多线程中,所有线程共享程序中变
量,如果每一个线程都希望单独拥有它,就需要线程存储了。即一个变量表面看起来是全
局变量,所有线程都可以使用它,它的值在每一个线程都是单独存储的。
00 0()创建一个类型为 /-/0类型变量
00000()/-/+,创建改变量,第二个参数为一个清理函数,用来在线程
释放该线程存储的时候调用。
00000()当线程中需要存储特殊值的时候,可以用 /E+,,第一个参数
为 /-/0变量,第二个参数为 (0变量,可以存储任何类型的值。
00000()当需要取出存储值的时候,调用 /E+,,返回 (类型变量
+/0,
00000L+,
000010%+,
0000106#+,
0000106!+BC55,
2
0000567H+8;009009.81010L,3
0000A6>5*+6QF;=/5):F=)F/MF%R,3
0000)$;=#*+,<'M-L+,3
?
)$;=#(0)$;=#*+,
2
0000*0+L=5#,02第一次进来必为 *
000000000/-/0-040=5#3
00000000)$;=#(0040+)$;=#(,/E+-,3
00000000*0+,0!03
00000000!00)$;=#3
0000?
0000
0000*0+#!,0!0BC553
0000
0000/!A/-+S=5#!A,3
*0+KL=5#,02
0第一个参数为指向一个键值的指针,第二个参数指明一个 ! 函
数,当线程结束时调用
00000000*0+/-/+S=5#10@!,0K40,02
000000000000/!A/!-+S=5#!A,3
000000000000!0BC553
00000000?
00000000
L=5#040!3
0000?
0000/!A/!-+S=5#!A,3
000003
?
剩余25页未读,继续阅读
资源评论
Nicky-Wu
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功