android中使用的Parcelable和Serialization有什么区别

SRa*_*Ram 32 android serializable parcelable

我想知道确切的,

  1. 我是应该使用parcelable还是serialization技术将数据从一个活动发送到另一个活动?
  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;
    }
}
Run Code Online (Sandbox Code Playgroud)

use*_*551 27

这些概念与进程间通信(IPC)有关.

在两个应用程序之间发送数据时,我们必须确保两个应用程序都应该了解正在发送的数据的格式.

特别是当您在两个应用程序之间发送非原始数据类型值(如类和对象)时,我们必须将它们转换为操作系统可理解的格式.操作系统只能理解原始类型(整数,字符等).转换的原因是我们必须通过OS通信通道来传输数据.

将非原始类型转换为基元并通过某个通信通道发送到其他应用程序的过程称为序列化.反向过程称为De Serialization.

在Java中,IPC严重依赖Serializables进行序列化.但序列化的设计考虑了桌面应用程序.当您在移动应用程序中进行IPC时,我们必须确保IPC的过程不会太重.

简单来说,序列化是IPC的一个重要概念.因此,取代Serialization,Android选择了Binders来实现轻量级的进程间通信.内部粘合剂在很大程度上依赖于包裹来进行IPC.包裹是轻质可序列化的.最好使用parcel将对象编组为字节流.

注意:Binder IPC在很大程度上依赖于共享内存概念,以确保在应用程序之间共享时没有太多数据重复.

  • 我不知道为什么这个答案到目前为止没有任何支持,它是相当完整的,说实话,对我来说是最好的. (4认同)

Aru*_*rge 19

是否应该使用parcelable或序列化技术将数据从一个活动发送到另一个活动.

如果要将非原始类型的数据/对象发送到另一个活动,则intent必须为该对象Serialize执行或实现Parcelable.首选技术是Parcelable因为它不会影响性能.

是否必须使用其中一个来将数据从一个发送到另一个./我何时应该使用它们.

它只是强制/用于发送非原始类型的数据对象.

以及它们与java方面的性能之间的确切差异.

序列化确实会影响性能.有关更多详细信息,请查看此链接Android Parcelable和Serializable

  • 可以使用`intent.putExtras(String id,PRIMITIVE_DATA_TYPE)`将原始数据类型从一个活动传递到另一个活动,并使用该类型的getMethod()等效项在其他活动中访问.但是用户定义的数据类型不是这种情况,因此你必须使用`serialization`或`Parcelable`. (2认同)

Bet*_*ine 5

对Parcelable和Serialization之间的区别有了很好的解释.

虽然从很长一段时间开始你的问题,它可能会帮助其他人:

  1. 我是否应该使用parcelable或序列化技术将数据从一个活动发送到另一个活动?

Ans:Parcelable是最好的选择(为什么稍后解释).

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

Ans:是的,因为将数据(对象)从一个发送到另一个需要写入和检索字节流,并且可以通过parcelable或serialization来完成.

  1. 我应该什么时候使用它们?

Ans:这部分你已经回答了,即将数据从一个活动传递到另一个活动.

  1. 以及它们与java方面的性能之间的确切差异.

答案:1.Android SDK中详细记录了Parcelable; 另一方面,序列化在Java中可用.

  1. 在Parcelable中,开发人员编写用于编组和解组的自定义代码,因此与序列化相比,它创建的垃圾对象更少.由于这种自定义实现,Parcelable over Serialization的性能显着提高(大约快两倍).

  2. 序列化是一种标记接口,这意味着用户无法根据其要求编组数据.在序列化中,使用Java反射API在Java虚拟机(JVM)上执行编组操作.这有助于识别Java对象成员和行为,但最终还是会创建大量垃圾对象.因此,与Parcelable相比,序列化过程很慢.

答案取自: 此链接

另见:序列化解释