发送有意图的对象会创建一个新对象吗



我花了很长时间才弄清楚这一点,但我注意到,当我将一个对象作为Extra传递给Intent(在我的情况下,是一个扩展Parcelable的对象)时,无论出于什么原因,它都会在内存中创建一个新对象,而不是保留相同的对象引用。

有没有办法让它保留引用?

无论出于何种原因,它都会在内存中创建一个新对象,而不是保留相同的对象引用

这取决于您对Intent所做的操作。如果您将其作为参数传递给自己的方法,或者以其他方式在进程中使用(例如,LocalBroadcastManager),则不应复制额外内容。

然而,我的猜测是,你正在做这样的事情:

  • startActivity()及其各种风味(如startActivityForResult())
  • startService()
  • bindService()
  • sendBroadcast()调用了Context
  • Intent封装在PendingIntent中并在某处使用该PendingIntent(例如,作为Notification的一部分)

在所有这些情况下,Intent数据都会在应用程序进程之外传递到中央操作系统进程。这需要复制数据。如果相关(例如,您正在启动的活动是您自己的活动),则Intent数据会从中央操作系统流程传递回您的流程,从而在您的流程中创建另一个副本。在这些情况下,复制是不可避免的。

问题是,如果我在第二个"活动"中更新对象,我希望它也在第一个活动中更新回来。

任一:

  • 此处没有单独的活动或

  • 不要通过Intent额外的方式传递对象(例如,有一个模型对象的中央缓存,并在额外的中传递模型的ID,这样其他活动就可以从缓存中提取对象)

最新更新