在Android中,意图(Intents)是在不耦合组件之间传递消息的一种优雅方式,但是如果您想要发送额外的数据怎么办?我知道您可以将各种值类型和实现Parcelable接口的对象作为extras添加,但这并不能真正满足本地发送用户定义类型的需求(即不通过远程接口)。有什么好的想法吗?
在您的类型中,您可以实现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);
如果您想在单个进程中传递对象,可以实现自己的Application
以维护全局状态:
这是一个基类,用于维护全局应用程序状态。您可以通过在AndroidManifest.xml的中指定其名称来提供自己的实现,这将导致在为您的应用程序/包创建进程时实例化该类。
当你说本地时,是指将用户定义的类型发送到属于同一APK的活动/本地服务吗?只要用户定义的类型是可包裹的,它就可以作为意图中的额外信息发送,并且可以在服务/活动的onStartCommand()方法中进行处理。