Android 当在活动和片段之间传递对象时,是否会进行ocurr序列化

Android 当在活动和片段之间传递对象时,是否会进行ocurr序列化,android,android-intent,fragment,bundle,Android,Android Intent,Fragment,Bundle,我有一个类裁剪,当涉及到将她的意图传递给另一个活动时,它是不可序列化的。但是,如果它是从一个活动到一个片段,那么就没有错误,我可以在另一端看到可绘制的对象,而没有任何错误 它如何在一种情况下可序列化,而在另一种情况下不可序列化 public class Crop implements Serializable { private String specieHarvest; private String specieLocation; private String spe

我有一个类裁剪,当涉及到将她的意图传递给另一个活动时,它是不可序列化的。但是,如果它是从一个活动到一个片段,那么就没有错误,我可以在另一端看到可绘制的对象,而没有任何错误

它如何在一种情况下可序列化,而在另一种情况下不可序列化

public class Crop implements Serializable {

    private String specieHarvest;
    private String specieLocation;
    private String specieName;
    private Drawable img;
}

首先,让我们回答你的问题

你看到这种行为的原因是

将对象作为附加对象传递给活动,总是会导致该对象被Android封送/取消封送,这被认为是某种IPC。 将对象作为参数传递给片段并不总是导致封送对象。 那么,当你的对象被发送到一个片段时,你的对象什么时候会被Android分解和重构

除非出于某种原因销毁并重新创建片段,否则它不会被序列化/反序列化,否则,该对象将保留在映射中,并且在调用getArguments时返回相同的对象

如果您甚至在片段中更改该对象,它将更改发送的原始对象,因为它实际上是相同的引用。疯了,对吧

若您查看Drawable类,您会发现它是不可打包或序列化的,所以不要在意图/参数中传递它

相反,如果可绘制对象在资源中,则传递一个int,该int可以是资源ID;如果是本地存储在某处的图像,则传递一个字符串路径

此外,传递int或string要好得多,因为Drawables往往是大的is size,这可能会导致您的应用程序崩溃,因为超出了intent extras的大小


这是一篇你也可以阅读的文章。

就是这样!非常感谢。我有一个与这个机械有关的错误。在此帖子中:。我面对的问题让我写下了这个问题。我现在知道答案了:当我尝试启动另一个活动时,我的MainActivity会被破坏,因此附加到她的片段会导致奇怪的序列化异常。如果你愿意的话,你也可以回答,我再把它标对一次。谢谢@elmorabea您可以为其他问题添加答案,因此,如果人们面临相同的问题,他们会找到答案: