Android 通过包检索可包裹对象是否总是创建新副本?
在创建片段时,我将一个可包裹的对象添加到一个束中,从而将其传递给片段。在onc实例中,对该地块对象的修改反映了对原始对象的修改,而在另一种情况下则不是。我对这种行为有点困惑。 到目前为止,我一直假设通过一个包检索一个包裹的对象总是会创建一个新对象[不确定它是浅拷贝还是深拷贝]Android 通过包检索可包裹对象是否总是创建新副本?,android,android-fragments,parcelable,android-bundle,Android,Android Fragments,Parcelable,Android Bundle,在创建片段时,我将一个可包裹的对象添加到一个束中,从而将其传递给片段。在onc实例中,对该地块对象的修改反映了对原始对象的修改,而在另一种情况下则不是。我对这种行为有点困惑。 到目前为止,我一直假设通过一个包检索一个包裹的对象总是会创建一个新对象[不确定它是浅拷贝还是深拷贝] 请有人澄清包裹的行为 我也遇到了类似的问题。乍一看,我们似乎总是从包裹的对象中获得新的深度副本。此外,甚至有StackOverflow答案建议使用Parcelable接口克隆对象。所有这些只会增加关于这个问题的困惑 经过大
请有人澄清包裹的行为 我也遇到了类似的问题。乍一看,我们似乎总是从包裹的对象中获得新的深度副本。此外,甚至有StackOverflow答案建议使用
Parcelable
接口克隆对象。所有这些只会增加关于这个问题的困惑
经过大量搜索和谷歌搜索,我发现:
- 仔细查看官方的
。以下是一段重要的引语:包裹
- 为了回答上面提到的问题,我决定浏览一下Android。我正在寻找的方法是
和readStrongBinder
,根据文档,这些方法在发送/接收包裹时不会导致创建新对象。我想我在课堂上找到了想要的答案。下面是有趣的一句话:writeStrongBinder
要了解这条线实际上在做什么,我们应该去官方那里。以下是最重要的部分:mReceiver = IResultReceiver.Stub.asInterface(in.readStrongBinder());
...
5.在onServiceConnected()的实现中,您将收到 IBinder实例(称为服务)。呼叫 YourInterfaceName.Stub.aInterface((IBinder)服务)来转换 已将参数返回到接口类型 关于调用IPC服务的一些评论: 对象跨进程进行引用计数 让我们把所有的东西放在一起:
readStrongBinder
方法读取包裹对象,则不会创建新实例。我们只需要获得一个对原始对象的新引用,这个引用可以防止其取消分配Parcelable
接口实现如果你想了解一个真实的例子,当关于
Parcelable
对象的混淆可能导致严重问题时,请查看我的。这是我目前为止的测试。如果我们通过Intent+Parcelable将一个对象传递给Activity,它将按值传递。如果我们通过Parcelable将一个对象传递给Fragment,它将通过引用传递。但是,我认为这种行为不能保证,因为没有记录在案。