使用intent发送对象会创建一个新对象吗?

时间:2016-06-02 20:01:57

标签: android object android-intent memory

我花了很长时间才想到这一点,但是我注意到当我将一个对象作为Extra传递给Intent时(在我的例子中,是一个扩展Parcelable的对象),无论出于何种原因,它都会创建一个新对象内存而不是保持相同的对象引用。

有没有办法让它保留参考?

1 个答案:

答案 0 :(得分:1)

  

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

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

然而,我的猜测是你做的事情如下:

  • startActivity()及其各种风格(例如startActivityForResult()
  • startService()
  • bindService()
  • sendBroadcast()号召Context
  • Intent包裹在PendingIntent并在某处使用PendingIntent(例如,作为Notification的一部分)

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

  

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

或者:

  • 此处没有单独的活动,或

  • 不要通过Intent额外传递对象(例如,拥有模型对象的中央缓存,并在额外的情况下传递模型的ID,因此其他活动可以拉出来自缓存的对象)