文档详情

android Serialiazble 和 Parcelable 的用法.doc

发布:2016-12-06约6.28千字共10页下载文档
文本预览下载声明
通过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?
显示全部
相似文档