在Android开发中,我们通过Intent/Bundle在组件之间(Activity/Services/ContentProvider/BroadcastReceivers)传递数据,由于组件之间通信方式是 IPC,因此只能通过数据流(byte[])的方式传递Bundle,所以目标组件所获取的数据是一个新对象,组件间传递的Bundle数据是传值。
那么,Activity通过setArguments传递到Fragment的Bundle数据是传引用还是传值?
答案是:
(1)绝大多数的情况下是传引用
由于Activity向Fragment发送参数并不是IPC过程,所以传递的Bundle数据是传引用,
Fragment从Bundle中获取到的对象与Activity所发送的对象就是同一对象。
(2)特殊情况下是传值
当内存不足等特殊情况下,Fragment在被销毁时将会以数据流(byte[])的方式保存Bundle,以便在Fragment重新恢复时重新创建Bundle,这种情况下,Activity向Fragment发送参数是传值。