你如何序列化Android Intents?

时间:2011-05-31 14:54:09

标签: android serialization android-intent

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

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

我当前的实现只是将Intent组件(action,categories,data uri和extras)写入SharedPreferences。此策略不支持Parcelables。

1 个答案:

答案 0 :(得分:7)

  

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

不是。

  

在哪里(如果有的话)记录了此限制?

我根本没想到额外的内容会被包含在Uri中。这类Uri生成背后的重点是向您展示如何将Uri添加为网站上的链接,并且您不需要为该方案添加额外内容。

toURI()不是序列化。

  

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

没有。特别是,根据定义,Parcelable无法序列化。

  

我当前的实现只是将Intent组件(action,categories,data uri和extras)写入SharedPreferences。

这种做法简直就是奇怪。

使用数据库。如果您作为一个年幼的孩子受到数据库的攻击,因此生活在对数据库的恐惧中,请使用JSON,XML或Serializable / ObjectOutputStream对文件进行序列化。使用SharedPreferences表示用户偏好。

  

此策略不支持Parcelables。

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