安卓中的Bundle和PersistableBundle有什么区别?

18

我对何时使用PersistableBundle类而不是Bundle类感到困惑。使用它有什么优势?能否有人澄清一下?


2
官方文档 PersistableBundleBundle。虽然并不是很有用。 - Manohar
2个回答

18

它就是它所说的。

这是一个将字符串键映射到各种类型值的集合。此类支持的类型集被有意地限制为可以安全地持久化到磁盘并从磁盘恢复的简单对象。

您可以在常规Bundle中放置几乎任何东西。但PersistableBundle只接受某些类型:

public static boolean isValidType(Object value) {
    return (value instanceof Integer) || (value instanceof Long) ||
            (value instanceof Double) || (value instanceof String) ||
            (value instanceof int[]) || (value instanceof long[]) ||
            (value instanceof double[]) || (value instanceof String[]) ||
            (value instanceof PersistableBundle) || (value == null) ||
            (value instanceof Boolean) || (value instanceof boolean[]);
}

这个限制是为了使它持久化。考虑到常规 Bundle 可以包含各种(自定义)数据,将该数据持久化到磁盘可能会很复杂。对于 PersistableBundle 来说,这更容易,因为您知道它根本不可能包含如此复杂的数据。


在Android中,当传递PersistableBundle时,是否仍然存在像Bundle一样的大小限制?如果我传递一个非常大的Bundle,可能会出现它太大的异常。 - j2emanue
我们为什么需要PersistableBundle? - Archie G. Quiñones
1
@ArchieG.Quiñones 能够持久化 Bundle 吗?我不理解你的问题。 - Tim
@ArchieG.Quiñones 不,它意味着可以持久化。例如,存储在磁盘上。 - Tim
1
@ArchieG.Quiñones 在什么情况下它会被持久化到磁盘上? - Daniel Brotherston
显示剩余2条评论

4

简单来说,PersistableBundle是一种磁盘安全的bundle类型。PersistableBundle和Bundle都继承自BaseBundle类。PersistableBundle类被认为是磁盘安全的,因为它限制了对象类型,只使用非常简单的类型,而不像Bundle类那样复杂。在处理作业服务和作业调度器时很有用。 您可以在此处查看Android文档


1
如何知道何时使用Bundle和PersistableBundle? - IgorGanapolsky
2
如果您想将一个bundle存储到磁盘上,可以使用PersistableBundle。 - Xpacer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接