Parcelable心得
16lz
2021-01-23
对于Android来说传递复杂类型,主要是将自己的类转换为基础的字节数组,Activity之间传递数据是通过Intent实现的。 Android序列化对象主要有两种方法,实现Serializable接口、或者实现Parcelable接口。实现Serializable接口是Java
SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,而且还可以用在进程间通信(IPC)中。实现Serializable接口非常简单,声明一下就可以了。而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。 Parcelable接口的作用:实现了Parcelable接口的实例可以将自身的状态信息(状态信息通常指的是各成员变量的值)写入Parcel,也可以从Parcel中恢复其状态。Parcel用来完成数据的序列化传递。
通过实现Parcelable接口序列化对象的步骤:
1、实现Parcelable接口。
2、并且实现Parcelable接口的public
void writeToParcel(Parcel dest, int flags)方法 。
3、自定义类型中必须含有一个名称为CREATOR的静态成员,该成员对象要求实现Parcelable.Creator接口及其方法。
public class Person implements Parcelable {public static final Parcelable.Creator<Person> CREATOR = new Creator<Person>() {@Overridepublic Person[] newArray(int size) {return null;}@Overridepublic Person createFromParcel(Parcel source) {Person result = new Person();result.age = source.readInt();result.name = source.readString();result.address = source.readParcelable(Address.class.getClassLoader());return result;}};private Address address;private String name;private int age;@Overridepublic int describeContents() {return 0;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeInt(age);dest.writeString(name);dest.writeParcelable(address, PARCELABLE_WRITE_RETURN_VALUE);}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person [address=" + address + ", name=" + name + ", age=" + age+ "]";}}最后在使用的时候可以用 intent.putExtra,直接存入Parce 最后说明一下,官方的文档里说在不同进程之间使用Parce,在同进程内使用Bind,但在我测试的时候发现,不管是activity之间的传递,还是activit到service到broadcast,都是可以用Parce的
public void sendBroadCast(View viwe){ Log.d("test",Thread.currentThread().getName()+ "发送了一个消息给广播"); Person person = new Person(); person.setAge(18); Address address = new Address(); address.setStreet("延陵南路"); person.setName("carlos"); person.setAddress(address); // Intent intent = new Intent("aaaa"); Intent intent = new Intent("aaaa"); intent.setClass(this, SendActivity.class);// intent.putParcelableArrayListExtra(name, value) intent.putExtra("person", person);// sendBroadcast(intent); startActivity(intent); }
更多相关文章
- android 进程
- Android接口安全 - RSA+AES混合加密方案
- Android接口定义语言---AIDL(一)
- android将对象写入文件和从文件中读取对象数据
- Android中获取系统内存信息以及进程信息-----ActivityManager的
- android获取进程信息,运行内存信息