首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Android上将原始对象(而不是复制)从一个活动传递到另一个活动

如何在Android上将原始对象(而不是复制)从一个活动传递到另一个活动
EN

Stack Overflow用户
提问于 2016-11-03 08:30:45
回答 4查看 322关注 0票数 2

如何在Android上将原始对象从一个活动传递到另一个活动?

当然,我们可以序列化(Serializable,Parcelable,to/from JSON),并传递一个对象数据的副本,可以创建一个具有相同数据的新对象;但是它不会有相同的引用。

以下是一些解决方案:

第一项活动的代码:

代码语言:javascript
运行
复制
final Object objSent = new Object();
final Bundle bundle = new Bundle();
bundle.putBinder(OBJECT_KEY, new ObjectWrapperForBinder(objSent));
startActivity(new Intent(this, SecondActivity.class).putExtras(bundle));        

第二项活动的代码:

代码语言:javascript
运行
复制
final Object objReceived = ((ObjectWrapperForBinder)getIntent().getExtras().getBinder(OBJECT_KEY)).getData();

但是最低API级别需要18

还有别的办法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-08-17 07:51:21

解决方案: BundleCompat允许在所有安卓版本中使用putBinder/getBinder。

ActivityA:

代码语言:javascript
运行
复制
final Bundle bundle = new Bundle();
BundleCompat.putBinder(bundle,KEY, new ObjectWrapperForBinder(callback));
intent.putExtras(bundle);

ActivityB:

代码语言:javascript
运行
复制
object = ((ObjectWrapperForBinder)BundleCompat.getBinder(intent.getExtras(),KEY)).getData();
票数 1
EN

Stack Overflow用户

发布于 2016-11-03 08:55:46

这取决于你的目标。

如果要在一个进程中工作,只需使用Singleton模式即可。但是,如果您想将真正的对象传递给(例如Service ),它具有属性android:isolatedProcess="true"

代码语言:javascript
运行
复制
<service
    android:name=".service.SomeService"
    android:enabled="true"
    android:exported="false"
    android:isolatedProcess="true"/>

那么您就不能将原始对象传递给另一个进程。

一个进程中的应用程序不能保存另一个进程中的对象,更不用说对它们“调用操作”了。

来源:使用Android中的Messenger在IPC中传递对象

因此,正如我所看到的,您正在尝试使用Intent机制传递原始对象。在我看来,它不可能通过Intent来完成,因为包含在Intent中的Bundle没有存储对真实对象的引用,所以这是不可能的。

票数 0
EN

Stack Overflow用户

发布于 2016-11-03 10:06:37

在这种情况下,EventBus将是一个很好的选择,它类似于全局订阅-观察者,它可以帮助在任何对象之间传递原始对象。

在要传递对象的活动中这样做:

代码语言:javascript
运行
复制
EventBus.getDefault().register(this);
EventBus.getDefault().post(new MessageEvent());

在要接收对象的活动中这样做:

首先,登记活动:

代码语言:javascript
运行
复制
EventBus.getDefault().register(this);

其次,使用@订户定义一个接收对象的方法:

代码语言:javascript
运行
复制
@Subscribe
public void onMessageEvent(MessageEvent event) 

希望这能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40396848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档