多个活动之间的对象共享

时间:2017-09-16 17:04:59

标签: android

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

4 个答案:

答案 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。上面只是伪代码。