我想在3个活动之间共享一个对象(具有多个状态),并且任何活动都可以修改对象状态,并且所有3个活动都应该可以访问相同的状态。 我不想使用单例对象,因为它将存在于整个应用程序中。 共享对象应该只持续到这3个活动出现的时间。
答案 0 :(得分:0)
嗨@rahul你可以在对象中实现parcelable并通过Intent将它传递给所有活动。这样你就可以维护状态,也可以避免单例。
由于使对象parcelable涉及更多样板代码,您可以使用此parceler库,该库不需要样板代码。 在使对象变为可分割之后,您可以通过Intent将其传递给任何活动,如此
Intent intent = new Intent(this, MyActivity.class);
intent.putParcelable("key", object_you_want_to_pass);
...
startActivity(intent);
答案 1 :(得分:0)
如果您的对象可以序列化,也许您可以尝试使用SharedPreferences
来存储您的特定对象,使用here所述的方法之一。然后,您可以解析它并从任何活动中修改它。
如果您希望仅在所有三个活动都在运行时才持久化,只需清除您的SharedPreferences条目。
答案 2 :(得分:0)
在设计应用时,您应避免在可能的情况下创建此类共享状态。但如果你真的需要它 - 见下文。
您可以创建一个单一的"引用计数" - Self releasing (reference counting) singelton
如果您想限制其可见性,您可以将其打包为私有(例如,如果您的活动位于同一个包中)。
但是整个事情对我来说有点过于复杂,我可能会使用普通的单例或Application类中的一个字段,如果我知道某些时候它不再是手动删除它需要的。
答案 3 :(得分:0)
Singleton仍然是管理此问题的最佳方法。
class Singleton {
static private Singleton _instance = null;
static private boolean _activity1 = false;
static private boolean _activity2 = false;
static private boolean _activity3 = false;
static public register(Activity activity) {
_instance = null;
if (activity instanceOf Activity1) _activity1 = true;
if (activity instanceOf Activity2) _activity2 = true;
if (activity instanceOf Activity3) _activity3 = true;
}
static public unregister(Activity activity) {
_instance = null;
if (activity instanceOf Activity1) _activity1 = false;
if (activity instanceOf Activity2) _activity2 = false;
if (activity instanceOf Activity3) _activity3 = false;
}
static public Singleton getInstance() {
if (_activity1 && _activitiy2 && _activity3) {
if (_instance == null)
_instance = new Singleton();
return _instance;
}
return null;
}
}
class Activity1 {
@Overrride
public void onCreateView() {
Singleton.register(this);
}
@Override
public void onDestroy() {
Singleton.unregister(this);
}
同样适用于Activity2和Activity3。上面只是伪代码。