- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
android Serialiazble 和 Parcelable 的用法概要1
通过dumpsys meminfo命令查看一个进程的内存情况
通过dos 链接手机 命令如下:(前提手机需要root)
输入命令:adb shell dumpsys meminfo com.winorout.travelclient.activity
运行结果如下:
Serialiazble 和 Parcelable 的用法
总体描述:
在Android开发过程中,经常要在Activity之间传递参数,使用Android系统提供的方法可以传递基本数据类型的变量,但有时候我们经常要传递一些复杂的数据类型或自定义的类,这种情况的参数无法直接传递,我们可以通过序列化实现。
为什么要将对象序列化?
?1、永久性保存对象,保存对象的字节序列到本地文件中;
?2、用过序列化对象在网络中传递对象;
?3、通过序列化对象在进程间传递对象。
实现:
对于Serializable,类只需要实现Serializable接口,并提供一个序列化版本id(serialVersionUID)即可。而Parcelable则需要实现writeToParcel、describeContents函数以及静态的CREATOR变量,实际上就是将如何打包和解包的工作自己来定义,而序列化的这些操作完全由底层实现。
实现Serialiable接口:
Serializable的作用是将数据对象存入字节流当中,在需要时重新生成对象,主要应用是利用外部存储设备保存对象状态,以及通过网络传输对象等。
implements Serializable接口的作用就是给对象打了一个标记,系统会自动将其序列化。案例1:
?1)User.java ?(implements Serializable )
?2)MainActivity.java ?
? ? ?User user = new User();
? ? ?Intent intent = new Intent(this,Second.class); ?
? ? ?intent.putExtra(user,user);
?3)Second.java
? ? ?Intent intent = getIntent();
? ? ?User user = intent.getSerializableExtra(user);
实现Parcelable接口:
为什么要实现Parfcelable接口来实现在Intent中传递对象?
? a、在使用内存的时候,Parcelabl比Serializable性能高,所以推荐使用Parcelable类。
? b、Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。Parcel的序列化和反序列化的读写全是在内存中进行,所以效率比JAVA序列化中使用外部存储器会高很多注意:Parcelable不能使用在将数据存储在磁盘上的情况,因为Parcelable不能很好的保存数据的持续性在外界有变化的情况下。因此在这种情况下,建议使用Serializable案例:
? ? 步骤1:自定义实体类,实现Parcelable接口,重写其两个方法。
? ? 步骤2:该实体类必须添加一个常量CREATOR(名字大小写都不能使其他的),该常量必须实现Parcelable的内部接口:Parcelable.Creator,并实现该接口中的两个方法。
User.java如下:public?class?User?implements?Parcelable?{??
????public?String?name;??
????public?int?age;??
????//?必须要创建一个名叫CREATOR的常量。??
????public?static?final?Parcelable.CreatorUser?CREATOR?=?new?Parcelable.CreatorUser()?{??
????????@Override??
????????public?User?createFromParcel(Parcel?source)?{??
????????????return?new?User(source);??
????????}??
????????//重写createFromParcel方法,创建并返回一个获得了数据的user对象??
????????@Override??
????????public?User[]?newArray(int?size)?{??
????????????return?new?User[size];??
????????}??
????};??
??
????@Override??
????public?String?toString()?
文档评论(0)