Parcelable心得
来源:互联网 发布:绘图设计软件 编辑:程序博客网 时间:2024/05/21 22:57
Parcelable心得
对于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接口及其方法。
简而言之:通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象。也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,在通过createFromParcel从流里读取对象,只不过这个过程需要你来实现,因此写的顺序和读的顺序必须一致。
下面是实例代码:
public
class
Person
implements
Parcelable {
public
static
final
Parcelable.Creator<Person> CREATOR =
new
Creator<Person>() {
@Override
public
Person[] newArray(
int
size) {
return
null
;
}
@Override
public
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;
@Override
public
int
describeContents() {
return
0
;
}
public
Address getAddress() {
return
address;
}
public
void
setAddress(Address address) {
this
.address = address;
}
@Override
public
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;
}
@Override
public
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);
}
0 0
- Parcelable心得
- Parcelable心得
- Android Parcelable接口使用心得
- Parcelable
- Parcelable
- Parcelable
- Parcelable
- Parcelable
- Parcelable
- Parcelable
- Parcelable
- Parcelable
- Parcelable
- Parcelable
- parcelable
- Parcelable
- Parcelable
- Parcelable
- python读写mysql
- Python-MySQL-1
- 深入浅出之正则表达式(一)
- Richtext中的&在IE和火狐以及Oracle中的不同
- Key Hashes for Facebook Apps - Android application development in Windows
- Parcelable心得
- sql语法:inner join on, left join on, right join on详细使用方
- 2015-2-5-C#Meteux互斥客户端
- 情趣谷 or 乐懿居
- Java多线程之线程池
- LeetCode101——Symmetric Tree
- Combining Qt Widgets and QML with QWidget::createWindowContainer()
- 网站安全 Spring MVC防御CSRF、XSS和SQL注入攻击
- LinuxC下获取UDP包中的路由目的IP地址和头标识目的地址