我在程序中有几个活动。可以说,活动A,B和C.如何在活动之间保留数据
活动A是在这种情况下的main activity
。它包含对象X,必须可供所有其他活动(活动:B和C)访问。
活动A将开始活动B,然后B将开始С.之后,活动A和B都在后台,并且可以由操作系统为killed
。我应该如何将对象X传递给活动B和C,以确保当A & B被杀时对象X不会被杀死?
我在程序中有几个活动。可以说,活动A,B和C.如何在活动之间保留数据
活动A是在这种情况下的main activity
。它包含对象X,必须可供所有其他活动(活动:B和C)访问。
活动A将开始活动B,然后B将开始С.之后,活动A和B都在后台,并且可以由操作系统为killed
。我应该如何将对象X传递给活动B和C,以确保当A & B被杀时对象X不会被杀死?
为什么你不能用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的值也会保留。
检查此链接了解如何使用共享偏好:
How to use SharedPreferences in Android to store, fetch and edit values
有三种可能的方式:在这里提到的
其中两个。
Via SharedPreferences。但请记住,SharedPreferences在应用程序关闭时保留该值。如果您希望该值在您的应用程序中“永久”,这是最佳解决方案。
创建一个单例对象。如果您想要在所有活动中操作对象但不想将其保存为其他运行,这是最佳解决方案。
通过附加功能发送数据。如果您只想要对象的VALUE并且不想操纵它,这是最好的解决方案。
尝试Intent
的putExtra()
功能只能使用它的原语。
如果X是只包含原语,你可能会写在X,public Intent fillIntentWithX(Intent intent)
内搭意图对象作为参数的函数,并填写在X原语的意图对象,并返回意图对象。
同样,在X,public X getXFromIntent(Intent intent)
中写入另一个函数,它将意图作为参数,提取驻留在其中的基元以形成新的对象X并返回它。
使用fillIntentWithX()来填充的意图,这将启动B,与 对象X的属性。
使用getXFromIntent()在 活动B中提取X,依此类推。
谢谢,但我需要操纵一个复杂的对象,而不是原始的。所以要使用Extras,我必须实现Parcelable接口(我这么认为)。 – Roman
您是否需要自定义对象或原始数据类型?如果后者是这种情况,可以使用SharedPreferences。 – Lennart
用于自定义对象。 – Roman