我们都知道Intent是传递信息的介质,我们用他用的最多的就是从一个Activity转换到另一个Activity,并且顺带传递一些数据到下一个Activity中。但是如果我们传递过去的是一个包含很多信息的对象呢?这里就需要使用到Parcelable和Serializable这两个接口。 使用这两个接口的原因很简单,就是为了序列化对象!对象序列化有以下好处: 1.永久性保存对象,保存对象的字节序列到本地文件中 2.用过序列化对象在网络中传递对象 3.通过序列化对象在进程间传递对象 然后就是使用Parcelable接口的性能比Serializable的性能更好,而且Serizlizanble在对象序列化时会产生大量的临时变量,容易GC。推荐使用Parcelable接口。
先是一个实例类,实现Parcelable接口,重写两个方法。然后就是添加一个常量CREATOR,并且实现内部接口Pracelable.Creator,实现里面的两个方法:
public class Person implements Parcelable {
public int age;// 年龄
public String name;// 姓名
@Override
public String toString() {
return "Person [age=" + age + ", name=" + name + "]";
}
public static final Parcelable.CreatorCREATOR = new Parcelable.Creator() {
// 返回对象数组大小
@Override public Person[] newArray(int size) {
// TODO Auto-generated method stub
return new Person[size];
}
// 读取信息
@Override
public Person createFromParcel(Parcel source) {
// TODO Auto-generated method stub
Person person = new Person();
person.age = source.readInt();
person.name = source.readString();
return person;
}
};
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
// 写入信息
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeInt(age);
dest.writeString(name);
}
}
然后就是MainActivity的代码了(这里注解的代码也是可以实现的,不需要bundle就直接传入Intent就可以传递对象。因为有这个方法Intent.putExtra(String name,Parcelable value)在,所以不用bundle也可以):
button1.setOnClickListener(new OnClickListener() {
@Override public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
// 携带对象参数
Person person = new Person();
person.age = 21;
person.name = "sdf";
Bundle bundle = new Bundle();
bundle.putParcelable("person", person);
// intent.putExtra("msg", person);
intent.putExtras(bundle); startActivity(intent);
}
});
然后就是跳转接收的Activity的代码,都很简单,一看就懂 :
public class SecondActivity extends Activity {
private TextView textView;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
textView = (TextView) findViewById(R.id.textview);
Person person=new Person();
Intent intent=getIntent();
person=intent.getParcelableExtra("person");
textView.setText(person.toString());
}
}
网友评论