答案:因为Android是基于Linux系统,不同进程之间的java对象是无法传输的。
假如两个avtivity传递的是一个对象,那么当在TwoActivity里继续操作MainActivity的对象那么必将造成内存泄漏。
Intent在启动其他组件时,会离开当前应用程序进程,进入ActivityManagerService进程(intent.prepareToLeaveProcess())。
这也就意味着,Intent所携带的数据要能够在不同进程间传输。
所以我们此处要对对象进行序列化,从而实现对象在 应用程序进程 和 ActivityManagerService进程 之间传输。
一、序列化
序列化,表示将一个对象转换成可存储或可传输的状态。将数据对象存入字节流当中,在需要时重新生成对象。序列化后的对象可以在网络上进行传输,也可以存储到本地。
二. 序列化的原因
序列化的原因基本三种情况:
1.永久性保存对象,保存对象的字节序列到本地文件中;
2.对象在网络中传递;
3.对象在IPC间传递。
putSerializable,是通过对象的序列化和反序列化来实现Activity之间对象的传递的,所以这种方法得到的就是两个完全不一样的对象(Activity2中的对象obj就相当于new了一个新对象,然后将Activity1中的对象obj的值都赋给了它,所以可以说它们的内容是一样的,但是对象不一样。
Intent传递基本数据类型,也只是传递值。