您的位置:首页 > 其它

Activiyty之间传递对象

2012-11-25 11:32 155 查看
Activiyty之间传递对象有两种方法,参考了网络上的资源本文进行总结。

两种方法目的都是为了实现对象的序列化,一种是实现Parcelable接口,一种是实现Serializable接口。

一 、序列化原因:

1.永久性保存对象,保存对象的字节序列到本地文件中;

2.通过序列化对象在网络中传递对象;

3.通过序列化在进程间传递对象。

二、 至于选取哪种可参考下面的原则:

1.在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。

2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。

3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点, 也不提倡用,但在这种情况下,还是建议你用Serializable 。

实现:

1、 Serializable 的实现,只需要继承 implements Serializable 即可。这只是给对象打了一个标记,系统会自动将其序列化。

Activity之间传递Serializable对象时,被传递的Serializable对象里面的自定义成员对象(非API中的Serializable对象)也要实现Serializable接口,否则会出现Caused by: java.io.NotSerializableException异常。从上面的代码可以看出,在Parcelable对象中是可以传递Serializable对象的,但Serializable对象里面传递的时候可不可以有Parcelable?回答是否定的,一样会产生java.io.NotSerializableException异常。

2、 Parcelabel 的实现,需要在类中添加一个静态成员变量 CREATOR,这个变量需要继承 Parcelable.Creator 接口。

可以参考

http://developer.android.com/reference/android/os/Parcelable.html

/article/8326536.html

使用:

1、 Serializable

1)存储

Intent intent = new Intent(this, PersonInfo.class);
intent.putExtra("PERSON_INFO", cc);
startActivity(intent);
2)提取

Intent intent = getIntent();

CustomeClass cc = intent.getSerializableExtra("PERSON_INFO");

2、 Parcelabel

1)存储

Intent intent = new Intent(Question1.this,Question2.class);

Bundle bundle = new Bundle();

bundle.putParcelable("question_objs", question);

intent.putExtras(bundle);

startActivity(intent);

2)提取

Intent intent = getIntent();

Question que = intent.getParcelableExtra("question_objs");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: