【问题标题】:How do you serialize Android Intents?你如何序列化Android Intents?
【发布时间】:2011-09-05 13:52:10
【问题描述】:

Android Intents 有一个方便的toURI() 方法,API 文档似乎表明这是一种将 Intent 序列化为 URI,然后再将其解析回 Intent 的方法。不幸的是,在测试这个功能时,我发现它并没有序列化所有额外的东西,只是原始类型(boolean、int、long、float、String)。如果 Intent 指定了任何 Parcelable 或数组 extras,那么这些将丢失。

这个限制在哪里(如果有的话)记录在案?这种行为是否有一些明显的原因(我可以想象 Parcelables 有一些困难)?最重要的是,有没有推荐的方法来序列化和解析 Intent?

我当前的实现只是将 Intent 组件(操作、类别、数据 uri 和附加)写入 SharedPreferences。此策略不支持 Parcelables。

【问题讨论】:

    标签: android serialization android-intent


    【解决方案1】:

    Android Intents 有一个方便的 toURI() 方法,API 文档似乎表明这是一种将 Intent 序列化为 URI,然后将其解析回 Intent 的方法。

    不是真的。

    这个限制在哪里(如果有的话)记录在案?

    我根本没想到Uri 中会包含额外内容。这种Uri 生成背后的意义在于向您展示如何将Uri 添加为网站上的链接,并且您不需要为这种情况添加额外内容。

    toURI() 不是序列化。

    最重要的是,有没有推荐的方法来序列化和解析 Intent?

    没有。特别是,Parcelable 根据定义不能被序列化。

    我当前的实现只是将 Intent 组件(操作、类别、数据 uri 和附加组件)写入 SharedPreferences。

    这种方法简直太奇怪了。

    使用数据库。如果您小时候受到数据库的攻击,因此生活在对数据库的极度恐惧中,请使用 JSON、XML 或 Serializable/ObjectOutputStream 将其序列化到文件中。使用SharedPreferences 设置用户偏好。

    此策略不支持 Parcelables。

    也不应该。也不能。 Parcelable 旨在将对象图转换为内存块,仅用于正在运行的设备中。这不是一个长期的持久性机制。

    【讨论】:

    • 也许我应该解释一下我的情况。我正在尝试为已收到的广播存储半永久意图。这些意图将具有仅在运行时才知道的操作和附加内容。 action 和 extras 用于启动和停止任意服务,也只在运行时知道。与其构建自定义数据结构来存储意图数据,我认为存储原始意图会更容易。根据您的说法,您似乎不知道比使用自定义数据结构更好的方法。
    • @Alan:您将需要一个自定义数据结构。很少(如果有的话)android.* 类实现了Serializable,这是完全序列化所需要的。我能想到的让Serializable 工作的唯一方法是让您创建自己的子类,创建 it Serializable,并依靠Intent 复制构造函数来完成工作从Intent 获取信息到您的Serializable 子类中。为此,我只需将这些内容写入 JSON。但是,话又说回来,我从不喜欢Serializable
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    相关资源
    最近更新 更多