android Serialiazble 和 Parcelable 的用法.doc
文本预览下载声明
通过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?
显示全部