Android 如何在活动站点之间保留数据

Android 如何在活动站点之间保留数据,android,Android,我在一个项目中有几个活动。比如说,活动A、B和C 在此上下文中,活动A是主要活动。它包含对象X,所有其他活动(活动:B和C)都必须可以访问该对象 活动A将启动活动B,然后B将启动С。之后,活动A和B都在后台,可以被操作系统杀死。我应该如何将对象X传递给活动B和C,以确保对象X在A和B被终止时不会被终止?为什么不使用SingleTon创建X对象?您可以让它保持活动状态,只要您愿意,并且您可以从任何您想要的地方获得相同的实例 public class TestObject { private st

我在一个项目中有几个活动。比如说,活动A、B和C

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


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

为什么不使用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;
    }
}

为什么不能用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;
    }
}

最好的方法是在共享首选项中保存X值。即使您的A和B活动被终止,X值也将保留

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


最好的方法是在共享首选项中保存X值。即使您的A和B活动被终止,X值也将保留

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


有三种可能的方法:

这里提到了其中两个

  • 通过共享数据引用。但请记住,当应用程序关闭时,SharedReferences将保留该值。如果您希望应用程序上的值是“永久性”的,这是最好的解决方案

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

  • 通过extras发送数据。如果您只想要对象的值而不想操纵它,那么这是最好的解决方案


  • 有三种可能的方法:

    这里提到了其中两个

  • 通过共享数据引用。但请记住,当应用程序关闭时,SharedReferences将保留该值。如果您希望应用程序上的值是“永久性”的,这是最好的解决方案

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

  • 通过extras发送数据。如果您只想要对象的值而不想操纵它,那么这是最好的解决方案

  • 尝试
    Intent
    您只能将其用于基本体

    如果您的X is只包含原语,您可以在X中编写一个函数,
    public Intent fillIntentWithX(Intent Intent)
    ,它将Intent对象作为参数,用X中的原语填充Intent对象,然后返回Intent对象

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

    • 使用fillIntentWithX()用 对象X的属性

    • 使用getXFromIntent()在中提取X 活动B,等等

    Intent
    您只能将其用于基本体

    如果您的X is只包含原语,您可以在X中编写一个函数,
    public Intent fillIntentWithX(Intent Intent)
    ,它将Intent对象作为参数,用X中的原语填充Intent对象,然后返回Intent对象

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

    • 使用fillIntentWithX()用 对象X的属性

    • 使用getXFromIntent()在中提取X 活动B,等等


    自定义对象或基本数据类型是否需要它?如果是后者,则可以使用SharedReferences。自定义对象或基本数据类型是否需要它?如果是后一种情况,SharedReferences可以用于此。谢谢,但我需要操作一个复杂的对象,而不是原语。所以要使用额外的东西,我必须实现Parcelable接口(我想是的)。谢谢,但我需要操作一个复杂的对象,而不是原语。所以要使用额外的功能,我必须实现Parcelable接口(我想是的)。谢谢。我不知道这个把戏。testObjectInstance何时将被销毁?就我而言,只有当进程被终止时,它才会被终止,不是吗?看看这个StackOverFlow问题,它以前已经讨论过。正如这里所讨论的,不要对可能导致内存泄漏的活动实例使用SingleTon。谢谢。我不知道这个把戏。testObjectInstance何时将被销毁?就我而言,只有当进程被终止时,它才会被终止,不是吗?看看这个StackOverFlow问题,它以前已经讨论过。正如这里所讨论的,不要对可能导致内存泄漏的活动实例使用SingleTon。