Android 如何在活动站点之间保留数据
我在一个项目中有几个活动。比如说,活动A、B和C 在此上下文中,活动A是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
主要活动。它包含对象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。