为什么Android为序列化对象提供了两个接口?序列化对象与Android Binder和AIDL文件interopt ?
当前回答
1. 可序列化的
@see http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html
什么接口?
是标准的Java接口吗
速度
比Parcelable慢
2. Parcelable
@see http://developer.android.com/reference/android/os/Parcelable.html
什么接口?
android。操作系统接口 这意味着谷歌开发的Parcelable在android上有更好的性能
速度
更快(因为它针对android开发进行了优化)
综上所述
要知道Serializable是一个标准的Java接口,Parcelable是Android开发的接口
其他回答
在Parcelable中,开发人员编写用于编组和反编组的自定义代码,因此与Serialization相比,它创建的垃圾对象更少。由于这个自定义实现,Parcelable over Serialization的性能显著提高(大约快两倍)。
Serializable是一个标记接口,这意味着用户不能根据自己的需求编组数据。在序列化中,使用Java反射API在Java虚拟机(JVM)上执行编组操作。这有助于识别Java对象的成员和行为,但最终也会创建大量垃圾对象。因此,与Parcelable相比,Serialization进程较慢。
编组和反编组的含义是什么?
简而言之,“编组”是指将数据或对象转换为字节流的过程,而“解组”是将字节流转换回原始数据或对象的相反过程。转换是通过“序列化”实现的。
http://www.jguru.com/faq/view.jsp?EID=560072
打包比使用Binder序列化快得多,因为序列化使用反射并导致许多GC。Parcelable是为了优化传递对象而设计的。
这是参考链接。 http://www.developerphil.com/parcelable-vs-serializable/
如果你在android studio中使用paracelable插件,parcelable的实现可以更快。搜索Android Parcelable代码生成器
你可以在intent中使用serializable对象,但是在使serialize成为Parcelable对象的时候,它会给出一个严重的异常,比如NotSerializableException。不建议使用serializable和Parcelable。所以最好是扩展Parcelable与你想要使用的对象捆绑和意图。由于这个Parcelable是android特定的,所以它没有任何副作用。 :)
Serializable是一个标准的Java接口。您只需通过实现接口将类标记为Serializable, Java将在某些情况下自动序列化它。
Parcelable是一个Android特定的接口,你可以自己实现序列化。创建它的目的是要比Serializable高效得多,并解决默认Java序列化方案的一些问题。
我相信Binder和AIDL可以用于可打包对象。
但是,你可以在intent中使用Serializable对象。
推荐文章
- 如何允许所有网络连接类型HTTP和HTTPS在Android(9)馅饼?
- Android加载JS包失败
- Android Studio, logcat在应用程序关闭后清理
- 在android中从上下文获取活动
- 无法解析主机"<URL here>"没有与主机名关联的地址
- getActivity()在Fragment函数中返回null
- 按钮背景是透明的
- 在Mac OS X上哪里安装Android SDK ?
- 我如何获得图像缩放功能?
- 在Android应用程序中显示当前时间和日期
- BottomSheetDialogFragment的圆角
- 在应用程序启动时出现“无法获得BatchedBridge,请确保您的bundle被正确打包”的错误
- 我如何改变默认对话框按钮的文本颜色在安卓5
- 更改单选按钮的圆圈颜色
- 如何在android中复制一个文件?