1. android Intent传递对象为什么要序列化,序列化有那几种方式
我们都知道进行android 开发的时候,跳转到Activity和Fragment的时候,传递对象是通过Intent或者bundle 进行传递。当这个对象没有实现序列化的时候 当你通过Inetnt传递的时候会报红,系统会提示你将这个对象实现序列化。
1.先了解一下 什么是序列化。通过对《Android 开发艺术探索》可以知道序列化是将一个对象转化成可存储可传输的状态,序列化后的对象可以在网络上传输,也可以存储到本地。
2.回到我们的主题,那为什么要序凳春列化呢?<大致有三个原因>
则橡 a.永久性保存对象,保存对象的字节序列到本地文件中
b.对象可以在网络中传输
c.对象可以在IPC之间传递
3.序列化有那几种方式呢<有两种方式>
android自定义对象可序列化有两个选择一个是Serializable和Parcelable
4.它们之间有什么区别?
a.在使用内存的时候Parcelable比Serializable的性能高。
b.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC(内存回收)。
c.Parcelable不能使用在将对象存储在磁盘上这种情况,因为在外界的变化下Parcelable不能很好的保证数据的持续性。
d.实现Serializable很简单 因为Serializable是一个空接口 所以只要在在实体类中实现这个接孙粗旁口即可 Parcelable就稍微复杂了一点了
这里有实现Parcelable 这个接口的列子 blog.csdn.net/jaycee110905/article/details/21517853
2. android bundle能传递bitmap吗
可以啊 可以直接传好吧!
Bitmap bitmap = null;
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putParcelable("bitmap", bitmap);
intent.putExtra("bundle", bundle);
bitmap已经自己实现了Parcelable接口
3. android bundle可以传递arraylist吗
可以的
4. android intent 可以传递enum 吗
可以使用序列化对象保存enum对象,如下内容:
bundle.putSerializable(String key , Seralizable data) //向Bundle放入一个可序列化的对象,例如:enum123123
示例:
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("enum", YourEnum.TYPE1);
intent.putExtras(bundle); //将bundle传入intent中。12341234
get
bundle.getXxx(String key);//从Bundle取出Int、String等各种类型的数据
bundle.gutSerializable(String key ) //从Bundle取出一个可序列化的对象,例如:enum1212
示例:
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
YourEnum TYPE1 = (YourEnum ) bundle.get("enum");//这时使用get()取出一个Object类型的对象,可以进行强制类型转化。