【问题标题】:How to retain data between activiites如何在活动之间保留数据
【发布时间】:2013-05-17 10:09:06
【问题描述】:

我在一个程序中有几个活动。比方说,活动 A、B 和 C。

活动 A 在此上下文中是 main activity。它包含对象 X,它必须可供所有其他活动(活动:B 和 C)访问。

活动 A 将启动活动 B,然后 B 将启动 С。之后,活动 A 和 B 都在后台,操作系统可以为 killed。我应该如何将对象 X 传递给活动 B 和 C 以确保对象 X 在 A&B 被杀死时不会被杀死?

【问题讨论】:

  • 自定义对象或原始数据类型需要它吗?如果是后者,可以使用 SharedPreferences。

标签: android


【解决方案1】:

你为什么不能用 SingleTon 创建你的 X 对象?您可以随心所欲地保持它存在,并且可以从任何您想要的地方获取相同的实例。

public class TestObject {

private static TestObject testObjectInstance;

/* put you data here */

   private TestObject() {

   }

   public TestObject getTestObjectInstance() {

       if (testObjectInstance != null) {

           return testObjectInstance;

       } else {

           testObjectInstance = new TestObject();
           return testObjectInstance;
       }
   }

    public TestObject createNewTestObjectInstance() {

       testObjectInstance = new TestObject();

       return testObjectInstance;
    }
}

【讨论】:

  • 谢谢。我不知道这个技巧。 testObjectInstance 什么时候会被销毁?就我而言,只有当进程被杀死时才会被杀死,不是吗?
  • 看看这个 StackOverFlow 问题,之前已经讨论过了。 SOF Question。正如这里所讨论的,不要将 SingleTon 用于您的 Activity 实例,这会导致内存泄漏。
【解决方案2】:

最好的方法是将 X 值保存在 Shared Preferences 中。即使您的 A 和 B 活动被终止,X 的值也会保留。

查看此链接了解如何使用共享首选项:

How to use SharedPreferences in Android to store, fetch and edit values

【讨论】:

    【解决方案3】:

    有三种可能的方式:

    这里提到了其中两个。

    1. 通过 SharedPreferences。但请记住,SharedPreferences 会在应用程序关闭时保留该值。如果您希望该值在您的应用程序中“永久”,这是最好的解决方案。

    2. 创建单例对象。如果您想在所有活动中操作对象但又不想将其保存以供下次运行,这是最佳解决方案。

    3. 通过 extras 发送数据。如果您只想要对象的 VALUE 而不想对其进行操作,这是最好的解决方案。

    【讨论】:

      【解决方案4】:

      尝试Intent 中的putExtra() 函数 您只能将其用于基元。

      如果你的 X 只包含原语,你可以在 X,public Intent fillIntentWithX(Intent intent) 中编写一个函数,以意图对象为参数,并用 X 中的原语填充意图对象,并返回意图对象。

      类似地,在 X 中编写另一个函数 public X getXFromIntent(Intent intent),它将意图作为参数,提取驻留在其中的原语以形成新对象 X,然后返回它。

      • 使用 fillIntentWithX() 填充启动 B 的意图,其中 对象 X 的属性。

      • 使用 getXFromIntent() 将 X 提取出来 活动 B,等等。

      【讨论】:

      • 谢谢,但我需要操作一个复杂的对象,而不是原始对象。所以要使用 Extras 我必须实现 Parcelable 接口(我认为是这样)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 2018-03-01
      • 1970-01-01
      相关资源
      最近更新 更多