你如何序列化Android Intents?

Ala*_*lan 6 serialization android 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.

Com*_*are 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用于将对象图转换为内存块,仅用于正在运行的设备.它不是一个长期的持久性机制.

  • @Alan:您需要一个自定义数据结构.很少,如果有的话,`android.*`类实现`Serializable`,这是完全序列化所需要的.关于我可以想到的'Serializable`工作的唯一方法是你创建自己的子类,make*it*`Serializable`,并依靠`Intent`复制构造函数来完成从中获取信息的工作. `Intent`到你的`Serializable`子类.为此,我只是把这些东西写给JSON.但是,再一次,我从未喜欢过`Serializable`. (2认同)