麦子学院Android开发教程Parcel的分析及使用.docxVIP

麦子学院Android开发教程Parcel的分析及使用.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
麦子学院Android开发教程Parcel的分析及使用

在android开发中,Parcel就是一个存放读取数据的容器, android系统中的binder进程间通信(IPC)就使用了Parcel类来进行客户端与服务端数据的交互,而且AIDL的数据也是通过Parcel来交互的。在Java空间和C++都实现了Parcel,由于它在C/C++中,直接使用了内存来读取数据,因此,它更有效率。??分析Binder机制中的客户端与服务器端进行实际操作ontransact()函数 ://参数说明:??// code :是请求的ID号? ?// data :客户端请求发送的参数??// reply:服务器端返回的结果??// flags:一些额外的标识,如FLAG_ONEWAY等,通常为0.??virtual status_t? ? onTransact( uint32_t code,??? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???const Parcel data,??? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???Parcel* reply,??? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???uint32_t flags = 0);??复制代码从中我们可以看到Parcel的重要性以及窥探它的使用情况,接下来,我主要分析它的存储机制。??? ? 常用方法介绍:? ?? ?? ?? ?obtain()? ?? ?? ?? ?? ?? ?? ?? ???获得一个新的parcel ,相当于new一个对象? ?? ?? ?? ?dataSize()? ?? ?? ?? ?? ?? ?? ? 得到当前parcel对象的实际存储空间? ?? ?? ?? ?dataCapacity()? ?? ?? ?? ?? ?得到当前parcel对象的已分配的存储空间, =dataSize()值??(以空间换时间)? ?? ?? ?? ?dataPostion()? ?? ?? ?? ?? ???获得当前parcel对象的偏移量(类似于文件流指针的偏移量)? ?? ?? ?? ?setDataPosition()? ?? ?? ???设置偏移量? ?? ?? ?? ?recyle()? ?? ?? ?? ?? ?? ?? ?? ?? ?清空、回收parcel对象的内存? ?? ?? ?? ?writeInt(int)? ?? ?? ?? ?? ?? ?? ?写入一个整数? ?? ?? ?? ?writeFloat(float)? ?? ?? ?? ???写入一个浮点数? ?? ?? ?? ?writeDouble(double)? ?? ? 写入一个双精度数? ?? ?? ?? ?writeString(string)? ?? ?? ???写入一个字符串? ?? ?? ?当然,还有更多的writeXXX()方法,与之对应的就是readXXX(),具体方法请参阅SDK。? ?? ?? ? 其中几个值得注意的方法为:? ?? ?? ?? ? writeException()? ?? ???在Parcel队头写入一个异常? ?? ?? ?? ? writeException()? ?? ???Parcel队头写入“无异常“? ?? ?? ?? ? readException()? ?? ???在Parcel队头读取,若读取值为异常,则抛出该异常;否则,程序正常运行。一、Parcel的分析? ?? ? 相信看了前面的值,对Parcel的使用该有了初步印象。那么,Parcel的内部存储机制是怎么样的?偏移量又是??什么情况?让我们回忆一下基本数据类型的取值范围:? ?? ?? ?? ?? ?? ? boolean? ???1bit? ?? ?? ? 1字节? ?? ?? ?? ?? ?? ? char? ?? ?? ? 16bit? ?? ?? ?2字节? ?? ?? ?? ?? ?? ? int? ?? ?? ?? ? 32bit? ?? ???4字节? ?? ?? ?? ?? ?? ? long? ?? ?? ? 64bit? ?? ???8字节? ?? ?? ?? ?? ?? ? float? ?? ?? ? 32bit? ?? ???4字节? ?? ?? ?? ?? ?? ?double? ?? ? 64bit? ?? ?? ?8字节? ?? ???如果大家对C语言熟悉的话,C语言中结构体的内存对齐和Parcel采用的内存存放机制一样,即读取最小字节为32bit,也即4个字节。高于4个字节的,以实际数据类型进行存放,但得为4byte的倍数。基本公式如下:? ?? ?? ?? ? 实际存放字节:? ?? ?? ?? ?? ?? ?? ???判别一:??32bit? ??

文档评论(0)

liudao + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档