【问题标题】:Android is Parcelable data available after garbage collection?垃圾收集后Android是否可以使用Parcelable数据?
【发布时间】:2012-05-14 15:08:22
【问题描述】:

parcelable 数据是持久的吗?我在 android 生命周期函数中销毁了一些变量,例如 onDestroy() ,但是写入 parcelable 的东西呢?

最终我想通过意图传递我的可打包对象的元素,垃圾回收后它们是否仍然可用(java 或 dalvik 的)?

谢谢

【问题讨论】:

    标签: android android-intent garbage-collection parcelable parcel


    【解决方案1】:

    简短的回答是:是的。 Parcelable 数据是持久的。

    当你用一个对象创建一个 Parcel 时,你基本上是在创建一个 at 对象的序列化版本。一旦你有了序列化的版本,对象本身就可以被垃圾收集,你仍然会有 Parcel(假设你已经保留了一个句柄,或者如果你已经通过 Intent 发送了它,那么操作系统就有了它的句柄) .

    在另一个时候,您可以从 Parcel 中实例化一个新对象,最终您将得到原始对象的副本,无论原始对象是否已被垃圾回收。

    【讨论】:

    • 如果我没有将包裹传递给当前活动,我该如何取回它?如果我通过了,这就是我会得到它的方式,Bundle b = getIntent().getExtras(); ObjectA obj = b.getParcelable("com.package.ObjectA"); 但如果我没有呢?
    • 不确定我是否理解您的问题。创建 Parcel 时,它只是一个字符串。您可以将其存储在静态(类)成员变量中,或通过 IPC 将其发送到另一个进程或其他东西。也许您需要更详细地解释您正在尝试做什么。
    • 我只是不完全理解包裹的概念以及它如何包含我的数据对象。
    • 不确定我能否用 500 个字符解释 Parcel 的概念 ;-) 您是否阅读过 Parcel 的开发人员文档?正如我所说,Parcel 是一个序列化对象(即:以已知顺序和格式写入字节流的对象的所有数据)。每个实现 Parcelable 接口的类都有责任提供可以将类的实例转换为 Parcel 的方法,反之亦然。如果你熟悉 Java 的Serializable 接口,这是一个类似的概念。
    猜你喜欢
    • 2023-03-21
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    相关资源
    最近更新 更多