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 = 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");
两种方法目的都是为了实现对象的序列化,一种是实现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");
相关文章推荐
- Android中级教程之(五)----->不同Activity之间的数据传递,Bundle对象的使用!
- Android中不同Activity之间传递自定义对象的参数问题的解决
- Activity之间传递对象之问题一
- Android学习札记11:利用Parcelable在Activity之间传递对象参数的官方解释和示例
- 17开年第一篇Activity之间传递List<T> 以及T对象类型数据的方法
- Android基础 -- Activity之间传递数据(bitmap和map对象)
- activity和activity之间传递对象,fragment和fragment之间传递对象的方法
- Android基础 -- Activity之间传递数据(bitmap和map对象)
- 利用Bundle在activity之间传递对象
- 两个窗体之间传递对象
- Activity和Activity之间传递对象
- Activity之间传递类对象
- 在DLL间或者DLL与EXE之间传递vector对象或指针的问题
- Android开发-基础:Activity之间的 对象传递
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- 不同Activity之间的数据传递--Bundle对象的实现
- 页面之间传递对象
- Android Activity 之间传递对象
- 利用Bundle在activity之间传递对象
- Android基础 -- Activity之间传递数据(bitmap和map对象)