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