我花了很长时间才弄清楚这一点,但我注意到,当我将一个对象作为Extra传递给Intent(在我的情况下,是一个扩展Parcelable的对象)时,无论出于什么原因,它都会在内存中创建一个新对象,而不是保留相同的对象引用。
有没有办法让它保留引用?
无论出于何种原因,它都会在内存中创建一个新对象,而不是保留相同的对象引用
这取决于您对Intent
所做的操作。如果您将其作为参数传递给自己的方法,或者以其他方式在进程中使用(例如,LocalBroadcastManager
),则不应复制额外内容。
然而,我的猜测是,你正在做这样的事情:
startActivity()
及其各种风味(如startActivityForResult()
)startService()
bindService()
sendBroadcast()
调用了Context
- 将
Intent
封装在PendingIntent
中并在某处使用该PendingIntent
(例如,作为Notification
的一部分)
在所有这些情况下,Intent
数据都会在应用程序进程之外传递到中央操作系统进程。这需要复制数据。如果相关(例如,您正在启动的活动是您自己的活动),则Intent
数据会从中央操作系统流程传递回您的流程,从而在您的流程中创建另一个副本。在这些情况下,复制是不可避免的。
问题是,如果我在第二个"活动"中更新对象,我希望它也在第一个活动中更新回来。
任一:
-
此处没有单独的活动或
-
不要通过
Intent
额外的方式传递对象(例如,有一个模型对象的中央缓存,并在额外的中传递模型的ID,这样其他活动就可以从缓存中提取对象)