首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

Activiyty其间传递对象

2012-11-26 
Activiyty之间传递对象Activiyty之间传递对象有两种方法,参考了网络上的资源本文进行总结。两种方法目的都

Activiyty之间传递对象

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

http://blog.csdn.net/maylian7700/article/details/7323993


使用:

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");




热点排行