Parcelbale接口

Posted woyaodangxueba

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Parcelbale接口相关的知识,希望对你有一定的参考价值。

参考链接

Parcelable接口相对Serializable接口比较复杂,但是有一套模板代码可以参考,所有的实现Parcelable接口的类都跟模板代码类似。

 1 package com.example.murphy.helloworld;
 2 
 3 import android.app.Person;
 4 import android.os.Parcel;
 5 import android.os.Parcelable;
 6 
 7 public class UserP implements Parcelable {
 8     private String account;
 9     private String password;
10 
11     //创建私有构造器,供CREATOR使用,从Parce回复数据
12     private UserP(Parcel in) {
13         account = in.readString();
14         password = in.readString();
15     }
16 
17     //用来恢复自定义对象
18     public static final Creator<UserP> CREATOR=new Creator<UserP>() {
19         @Override
20         public UserP createFromParcel(Parcel source) {
21             return new UserP(source);
22         }
23 
24         @Override
25         public UserP[] newArray(int size) {
26             return new UserP[size];
27         }
28     };
29 
30 
31     @Override
32     public int describeContents() {
33         return 0;
34     }
35 
36     /*将数据写到Parce中*/
37     @Override
38     public void writeToParcel(Parcel dest, int flags) {
39         dest.writeString(password);
40         dest.writeString(account);
41     }
42 }

 序列化之后可使用Bundle的putParcelable的方法,将实现Parcelable接口的对象放进bundle打包进Intent然后传送。

序列化功能由writeToParcel来完成,最终是通过Parcel中的一系列write方法来完成的;反序列化功能由CREATOR来完成,其内部表明了如何创建序列化对象和数据,并通过Parcel的一系列read方法来完成反序列化的过程;内容描述功能由describeContents方法来完成,几乎在所有情况下这个方法都是返回0,仅当当前对象中存在文件描述符时,此方法返回1.需要注意的是,由于person是另一个可序列化对象,所以它的反序列化过程需要传递当前线程的上下文类加载器,否则会报无法找到类的错误。
 
Serializable和Parcelable选择哪个?

Serializable是Java中的序列化接口,其使用起来简单但是开销很大,序列化和反序列化过程需要大量IO操作。而Parcelable是Android中序列化方式,因此更适合用在Android平台上,它的缺点是使用起来稍微复杂一点,但是因为有一套模板,所以这点复杂还是可以接受的,而且它的效率很高,这也是Android推荐的序列化方式,因此在Android平台上首选Parcelable。

以上是关于Parcelbale接口的主要内容,如果未能解决你的问题,请参考以下文章

与另一个片段通信的片段接口

java 代码片段

无法通过接口获取与片段通信的活动

将接口从片段传递到kotlin中的活动

是否可以动态编译和执行 C# 代码片段?

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段