Android - 在不同apk上的服务之间传递可序列化或可打包的捆绑包
Posted
技术标签:
【中文标题】Android - 在不同apk上的服务之间传递可序列化或可打包的捆绑包【英文标题】:Android - Passing serializable or parcelable in bundle between services on different apk 【发布时间】:2016-03-25 09:17:20 【问题描述】:我正在开发属于不同 android apk 的服务之间的消息接口。
发送方服务可以向接收方服务发送一条消息,实现为Bundle
。
String 或 boolean 等原始类型已正确交换。
接下来的步骤是交换更复杂的对象,这些对象在库中定义,在不同的服务之间共享。
这些对象实现了Parcelable
或Serializable
接口,因此可以使用putParcelable
和putSerializable
方法将它们封装在Bundle
中。
很遗憾,此解决方案不起作用。在服务接收到的 bundle 对象中,可打包(或可序列化)对象被替换为String
。似乎Android在将Bundle发送到接收器服务之前调用了对象的toString
方法。
如果不实现可以将每个对象序列化为仅由原始类型形成的Bundle
的方法,是否有解决此问题的方法?
【问题讨论】:
当您从 Bundle 中调用getParcelable()
时会发生什么?你是空的吗?
您的代码有问题:您可以轻松地在 Binder 事务中传递任何 Parcelable
@NoChinDeluxe 当我调用 getParcelable()
执行对预期类型的转换时,会抛出类转换异常,因为 Bundle
中的元素被视为 String
对象。
所以例如this 对你不起作用?
我觉得你实现Parcelable
接口的方式有问题。您能否发布一些您的 Parcelables 的代码以显示其中一个失败的示例?
【参考方案1】:
您始终可以将Base64
ed 对象交换为字符串,并且可以从ByteArray
s 生成字符串,因此您可以尝试一个想法。
当你考虑它时,你实际上可以通过字符串传递很多东西:)
【讨论】:
你是对的。目前,我将对象序列化为 JSON,以便可以将其作为String
传递,但如果可能的话,我正在寻找更好的解决方案。以上是关于Android - 在不同apk上的服务之间传递可序列化或可打包的捆绑包的主要内容,如果未能解决你的问题,请参考以下文章