在Android開(kāi)發(fā)中,我們通過(guò)Intent/Bundle在組件之間(Activity/Services/ContentProvider/BroadcastReceivers)傳遞數(shù)據(jù),由于組件之間通信方式是 IPC,因此只能通過(guò)數(shù)據(jù)流(byte[])的方式傳遞Bundle,所以目標(biāo)組件所獲取的數(shù)據(jù)是一個(gè)新對(duì)象,組件間傳遞的Bundle數(shù)據(jù)是傳值。
那么,Activity通過(guò)setArguments傳遞到Fragment的Bundle數(shù)據(jù)是傳引用還是傳值?
答案是:
(1)絕大多數(shù)的情況下是傳引用
由于Activity向Fragment發(fā)送參數(shù)并不是IPC過(guò)程,所以傳遞的Bundle數(shù)據(jù)是傳引用,
Fragment從Bundle中獲取到的對(duì)象與Activity所發(fā)送的對(duì)象就是同一對(duì)象。
(2)特殊情況下是傳值
當(dāng)內(nèi)存不足等特殊情況下,F(xiàn)ragment在被銷毀時(shí)將會(huì)以數(shù)據(jù)流(byte[])的方式保存Bundle,以便在Fragment重新恢復(fù)時(shí)重新創(chuàng)建Bundle,這種情況下,Activity向Fragment發(fā)送參數(shù)是傳值。