答案:因?yàn)锳ndroid是基于Linux系統(tǒng)长酗,不同進(jìn)程之間的java對象是無法傳輸?shù)摹?/b>
假如兩個avtivity傳遞的是一個對象县匠,那么當(dāng)在TwoActivity里繼續(xù)操作MainActivity的對象那么必將造成內(nèi)存泄漏。
Intent在啟動其他組件時,會離開當(dāng)前應(yīng)用程序進(jìn)程芒划,進(jìn)入ActivityManagerService進(jìn)程(intent.prepareToLeaveProcess())。
這也就意味著欧穴,Intent所攜帶的數(shù)據(jù)要能夠在不同進(jìn)程間傳輸民逼。
所以我們此處要對對象進(jìn)行序列化,從而實(shí)現(xiàn)對象在?應(yīng)用程序進(jìn)程 和 ActivityManagerService進(jìn)程?之間傳輸涮帘。
一拼苍、序列化
序列化,表示將一個對象轉(zhuǎn)換成可存儲或可傳輸?shù)臓顟B(tài)调缨。將數(shù)據(jù)對象存入字節(jié)流當(dāng)中疮鲫,在需要時重新生成對象。序列化后的對象可以在網(wǎng)絡(luò)上進(jìn)行傳輸同蜻,也可以存儲到本地棚点。
二. 序列化的原因
序列化的原因基本三種情況:?
1.永久性保存對象,保存對象的字節(jié)序列到本地文件中湾蔓;
2.對象在網(wǎng)絡(luò)中傳遞瘫析;?
3.對象在IPC間傳遞。
putSerializable,是通過對象的序列化和反序列化來實(shí)現(xiàn)Activity之間對象的傳遞的,所以這種方法得到的就是兩個完全不一樣的對象(Activity2中的對象obj就相當(dāng)于new了一個新對象,然后將Activity1中的對象obj的值都賦給了它,所以可以說它們的內(nèi)容是一樣的,但是對象不一樣默责。
Intent傳遞基本數(shù)據(jù)類型贬循,也只是傳遞值。