【问题标题】:Pass a custom object list to an activity: parcelable or serializable?将自定义对象列表传递给活动:可打包还是可序列化?
【发布时间】:2012-09-20 06:03:07
【问题描述】:

来自安卓文档:

注意:看到 Parcelable 可能引发了一个问题,为什么 Android 不使用内置的 Java 序列化机制?事实证明,Android 团队得出的结论是,Java 中的序列化速度太慢,无法满足 Android 的进程间通信要求。因此,该团队构建了 Parcelable 解决方案。 Parcelable 方法要求您显式序列化类的成员,但最终,您可以更快地序列化对象。

所以我们知道 Parcelable 实际上比 Serializable 更好,但另一方面,

还要意识到 Android 提供了两种机制,允许您将数据传递给另一个进程。第一种是使用意图将捆绑包传递给活动,第二种是将 Parcelable 传递给服务。这两种机制不可互换,不应混淆。也就是说,Parcelable 并不意味着传递给活动。 如果您想启动一项活动并为其传递一些数据,请使用捆绑包。 Parcelable 仅用作 AIDL 定义的一部分

好的,但是我需要将自定义对象列表传递给我的活动!所以在捆绑包中我仍然需要放入可打包或可序列化的对象!

现在我是这样做的:

public class MyObject implements Serializable{

并通过:

 Bundle b = new Bundle();
 b.putSerializable("objList", anArrayListWithMyObjectElements);
 intent.putExtra("objList", b);

因为 ArrayList 也实现了 Serializable 它工作正常...但我看不出以这种方式使用捆绑包的意义...但是 android 告诉我不要使用 Parcelable 进行活动通信...正确答案是什么? ?

【问题讨论】:

    标签: android


    【解决方案1】:

    根据我的经验,我强烈建议尽可能使用Parcelable,无论是否使用 IPC。它是 Android 的事实上替代 Java 的 Serializable,并且更加优化。

    如果您在如何包裹物品方面需要帮助,请告诉我。

    【讨论】:

    • 我虽然这样做了:1)我让我的自定义对象实现 Parcelable(它有很多简单的属性),而不是我创建一个仍然实现 Parcelable 并包含这些对象的 ArrayList 的容器类: 它的 parcelable 实现只是为每个对象调用 parcelable 方法...正确吗?
    • Parcelable 是最好的方法。
    • Serializable 比 parcelable 简单得多。在很多情况下,serializable 就足够了,而 parcelable 的优势并没有发挥出来。
    • ArrayList 实现了Parcelable 所以你实际上不需要任何包装类。
    • 我遇到过解组根本失败的情况。我不知道为什么。所以,我必须使用 Serializable 而不是 Parcelable。类更简单,速度没有问题。
    猜你喜欢
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多