2017-09-16 63 views
0

我想在3个活动之间共享一个对象(具有多个状态),任何活动都可以修改对象状态,并且所有3个活动都应该可以访问同一个状态。 我不想使用单例对象,因为它将存在于整个应用程序中。 共享对象应该一直存在,直到这3个活动出现时为止。Objet共享多重活动

+0

如果您希望作为任何对象,并且它不会持续整个应用程序,您可以将singelton对象设置为null。另一个答案是使用观察者模式或EventBus库来发送和接收来自其他活动或片段的信息。 – Thracian

+0

感谢您的回答。你能告诉我观察者模式在这里会有帮助吗? – Rahul

+0

EventBus是一个使用Observer模式的库。您可以搜索EventBus Observer模式,您将获得大量文章或示例。您可以通过在每个活动上实现接口(侦听器回调)并通过Application类(名称注册(MyCallback回调))将这些活动添加到侦听器列表来实现观察者模式。是的,它应该是听者名单或观察者不应为空的Applcation。 onStart添加(注册)一个活动列表和onPause删除(注销)一个活动。如果您知道观察者模式,那么这是一种普遍使用的模式,因为您可能知道这一点。 – Thracian

回答

0

hi @rahul你可以在你的对象中实现parcelable,并通过Intent将它传递给所有活动。这样你就可以维护状态以及避免单例。

由于制作对象parcelable涉及更多样板代码,因此您可以使用此库,该库不需要样板代码。 制作一个对象后parcelable您可以通过意向传递到任何活动,这样

Intent intent = new Intent(this, MyActivity.class); 
intent.putParcelable("key", object_you_want_to_pass); 
... 
startActivity(intent); 
0

如果你的对象可以被序列化,也许你可以尝试使用SharedPreferences来存储您的特定对象,利用所描述的方法之一here。然后您可以解析它并从任何活动修改它。

如果你希望它只在你所有的三个活动都在运行的时候才是持久的,那么只需清除你的SharedPreferences项即可。

0

在一般的设计你的应用程序时,你应该避免在可能的时候创建这样的共享状态。但如果你真的需要它 - 见下文。

你可以创建一种“引用计数”的单 - 如果你想限制其可见性你可以把它包专用例如(如果你的活动是在同一个包)Self releasing (reference counting) singelton

但是这整个事情看起来有点过于复杂,我可能会去与正常的单身人士或您的应用程序类中的字段,也许手动删除它,如果我知道在某个时候不再需要它。