如何在Android中使用Intent发送自定义数据对象?

6
在Android中,意图(Intents)是在不耦合组件之间传递消息的一种优雅方式,但是如果您想要发送额外的数据怎么办?我知道您可以将各种值类型和实现Parcelable接口的对象作为extras添加,但这并不能真正满足本地发送用户定义类型的需求(即不通过远程接口)。有什么好的想法吗?
3个回答

4

在您的类型中,您可以实现Serializable接口,并调用Intent.putExtra(String, Serializable)方法将其包含在意图中。对于类似的问题,我曾考虑过自己实现它,但最终选择将数据放入Bundle中,因为我的类型只有两个字段,这样做并不值得努力。

以下是如何运作的,假设您已经在Foo上实现了Serializable

Foo test = new Foo();
test.Name = "name";
test.Value = "value";

Intent intent = new Intent();
intent.putExtra("test", test);

1

如果您想在单个进程中传递对象,可以实现自己的Application以维护全局状态:

这是一个基类,用于维护全局应用程序状态。您可以通过在AndroidManifest.xml的中指定其名称来提供自己的实现,这将导致在为您的应用程序/包创建进程时实例化该类。


好的,那么使用应用程序作为共享数据的一种代理/存储? - MalcomTucker
如果需要的话,您可以将它实现为一个存储库。 - Josef Pfleger

0

当你说本地时,是指将用户定义的类型发送到属于同一APK的活动/本地服务吗?只要用户定义的类型是可包裹的,它就可以作为意图中的额外信息发送,并且可以在服务/活动的onStartCommand()方法中进行处理。


本地指的是不通过aidl,在同一进程、同一应用程序中。问题在于,为复杂的自定义数据类型实现Parcelable可能会非常痛苦,而我所需要做的就是使用Intent传输一个对象... - MalcomTucker

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