是什么在Android中使用Parcelable和序列化之间的区别(what is differen

2019-06-25 13:38发布

我想确切知道,

  1. 是否应我用parcelableserialization技术用于发送从一个活动数据到其他?
  2. 是否必须使用其中一个从一个到另一个发送数据?
  3. 当我要使用它们?
  4. 和他们在Java方面两者的性能之间的确切差异。

提前致谢。


 public class GetSetClass implements Serializable {
    private int dt = 10;

    /** pass any object, drwabale */
    public int getDt() {
        return dt;
    }

    public void setDt(int dt) {
        this.dt = dt;
    }
}

Answer 1:

是否应我用parcelable或序列号的技术,用于从一个活动发送数据到其他。

如果您是通过发送非基本类型的数据/对象到另一个活动intent ,你必须要么Serialize或实现Parcelable该对象。 较好的方法是Parcelable ,因为它不影响性能。

是规定必须使用其中一个用于发送数据从一个到其他。 /我应该什么时候使用它们。

只有强制/用于发送非基本类型的数据对象。

和他们在Java方面两者的性能之间的确切差异。

序列化不影响性能。 有关详情,请此链接的Android Parcelable和序列化



Answer 2:

这些概念涉及进程间通信(IPC)。

当两个应用程序之间发送数据时,我们必须确保这两个应用程序应该明白,正在发送的数据的格式。

尤其是当你发送非基本数据类型的值,就像两个应用程序之间的类和对象,我们必须将它们转换成操作系统可以理解的格式。 OS只能理解原始类型(整数,字符等)。 其原因转换我们必须OS的通信信道来传输数据。

在一些通信信道转换的非原语类型的原语和发送跨到其他应用程序的该过程被称为序列化。 相反的过程被称为德序列化。

在Java中,IPC在很大程度上取决于Serializables进行序列化。 但是序列化是由牢记桌面应用而设计的。 当你在移动应用做IPC我们必须确保IPC的过程是不是太沉重。

简单来说序列化是IPC沉重的概念。 因此,在地方系列化的Android的选择了粘合剂实现轻量化进程间通信。 粘合剂内部在很大程度上取决于包裹,做IPC。 包裹是轻重量serializables。 它优选使用包裹用于编组对象成字节流。

注:粘合剂IPC很大程度上依赖于共享存储的概念,以确保没有太多的重复数据,而应用程序之间共享。



Answer 3:

得到了Parcelable和序列化之间的差异很好的解释。

要开始使用你的问题,虽然它是一个很长一段时间,它可以帮助别人:

  1. 是否应我用parcelable或序列号的技术用于发送从一个活动数据到其他?

答:Parcelable是最好的选择(为什么后面解释)。

  1. 是否必须使用其中一个从一个到另一个发送数据?

答:是的,从一个发送数据(对象),以其他需要的字节流将被写入和检索的,并且可以要么通过parcelable或序列来完成。

  1. 当我要使用它们?

答:这部分你arleady即回答,从一个活动传递到另一个数据。

  1. 和他们在Java方面两者的性能之间的确切差异。

答:1,Parcelable很好地在Android SDK中; 在另一方面序列化Java中是可用的。

  1. 在Parcelable,开发人员编写自定义代码的编组和解组,因此产生比较系列化少垃圾对象。 Parcelable在序列化的性能显着提高(两次左右更快),因为这种自定义实现的。

  2. 序列化是一个标记接口,这意味着用户根据他们的要求不能封送数据。 在序列化,则在Java虚拟机(JVM)使用Java反射API执行的编排操作。 这有助于识别Java对象成员和行为,同时也结束了创建大量垃圾的对象。 由于这个原因,序列化过程是比较缓慢Parcelable。

回答采取: 此链接

另请参见: 序列化解释



Answer 4:

Java的Serializable接口 -可序列化来自标准的Java,并实现所有你需要做的是实现Serializable接口,并添加覆盖两种方法要容易得多。
与序列化的问题是,它试图妥善处理一切在阳光下,并使用了大量的反射,使确定正在序列化的类型。 因此,它成为一个结实的对象。

机器人Parcelable: - Android的进程间通信(AIPC)文件来告诉Android的是如何应编组和取消编组你object.It不太通用,并且不使用反射所以它应该有更少的开销和快不少。

从阅读更多http://www.3pillarglobal.com/blog/parcelable-vs-java-serialization-android-app-development



Answer 5:

既parceling和序列化办法马歇尔和解组数据。 在机器人这被用来传递组件和进程之间的非原始数据类型。 在一般情况下,Android的允许使用序列化或parcelable对象,所以你可以选择你的方法。 唯一的例外是与AIDL接口。 /返回的对象必须是parcelable传递。

序列化使用反射来自动马歇尔和解组数据。 在实现标记接口大多数情况下是足以令它只是工作。 与parceling,你必须编写代码来马歇尔和自己解组数据。

因此,这就是为什么parceling更快。 对象不需要反映到发现场。 它是反射,使得它缓慢。

序列化还内置版本...如果你试图解组到不同版本的对象的类这是编组,该过程将在可预见的方式失败。 与parceling,你可以做同样的事情,但你需要添加一个“版本字段到你的对象实现它自己,并unmarhsaling时检查版本的代码。

他这样说,我通常使用序列化。 与简单的物体,你不会注意到其中的差别。 你可以随时更改,如果你发现性能问题,使用后的发展parceling。



文章来源: what is difference between Parcelable and Serialization used in android