将对象从 Activity 传递到 Fragments 是通过引用传递

Passing Objects from Activity to Fragments is Pass by Reference

当我们使用 SerializableParcelableactivities 之间传递对象时,将发送对象 的 copy/value接收 activity(典型的按值传递行为)。

但为什么当我们将对象作为 ParcelableBundle 中传递给 Fragments 时,出于某种原因,它们被作为对象的 引用发送 而不是对象的 copy/value (通过引用行为)。我还没有检查过 Serializable 但我相信这将是一样。

对象的传递方式相同,那么为什么 Activity 接收 object 的方式与 Fragment 接收的方式不同?

But why is it that when we pass objects to Fragments as Parcelable inside Bundle, for some reason they are sent as reference of object instead of copy/value of the object

不能保证。例如,如果您进行了配置更改,或者您的进程已终止但用户 returns 快速完成您的任务,您将获得一份副本。

The object is passed the same way so why is there a difference in how the Activity receives the object and how the Fragment receives it ?

启动 activity 总是涉及 IPC,因此总是涉及跨进程边界复制数据。

我遇到了同样的问题,我认为它通过了参考。

   public void setArguments(Bundle args) {
    if (mIndex >= 0) {
        throw new IllegalStateException("Fragment already active");
    }
    mArguments = args;
}

/**
 * Return the arguments supplied when the fragment was instantiated,
 * if any.
 */
final public Bundle getArguments() {
    return mArguments;
}

我从 Fragment 源代码中找到了这个,它与传递数据的活动不同,尽管它们都使用 Bundle