这是一个非常简单的问题,但无论如何我都无法找到完成我想要做的事情......
我想启动一个新的Activity来显示一些复杂的信息。由于复杂性,不希望将信息序列化为意图的参数。是否有可能新的Activity获取对启动活动的引用,因此它可以调用其方法?
答案 0 :(得分:4)
如果您使用自定义应用程序类,则可以存储将在活动之间保留的信息。
例如,请参阅tutorial here。
答案 1 :(得分:2)
不能依赖活动的生命周期。在这种情况下,共享数据的一种方法是使用单例来保存要在两个活动之间共享的数据。
答案 2 :(得分:2)
您可以将公共静态字段添加到包含this
的第一个活动(第一个活动)。
但请注意,当您使用第二个活动时,Android可能会破坏第一个活动,因此如果第一个活动被销毁,您将不得不实施回退方法。
不要忘记在第一个活动的onDestroy()
回调中取消设置公共静态变量,否则会泄漏内存。
答案 3 :(得分:2)
新Activity是否可以获取对启动活动的引用,以便它可以调用其方法?
请不要那样做。 Android可以并且将破坏活动以释放内存。
您描述的复杂信息不应归活动所有。它应该保存在中央数据模型中,就像在任何其他应用程序中一样。该中央数据模型是由Service
还是单例还是自定义Application
对象调解,取决于数据类型,缓存模型,内存泄漏风险等等。
答案 4 :(得分:1)
您可以在public
中制作复杂对象static
和ActivityA
,并在ActivityB
中访问它们,如下所示:
MyCustomObjectType complexFromA = ActivityA.complexObject;
这样可行,但在ActivityB
中,您无法始终确保ActivityA
中的静态对象存在(它们可能为空),因为Android可能会终止您的应用程序。
然后可能添加一些空检查:
if(null == ActivityA.complexObject) {
//go back to ActivityA, or do something else since the object isn't there
}
else {
//business as usual, access the object
MyCustomObjectType complexFromA = ActivityA.complexObject;
}
您还可以使用扩展Application
的Singleton对象。 Android终止您的应用程序时会遇到同样的问题。总是需要检查对象是否确实存在。使用Singleton扩展Application
方法似乎是更有条理的方式 - 但增加了实现的复杂性。只是取决于你需要做什么以及适合你的实施。
答案 5 :(得分:0)
您应该创建一个活动可以使用的单独的类。
public class HelperClass{
public void sharedFunction(){
//implement function here
}
}
我建议远离android中的静态变量。它可能会导致一些意想不到的行为。
答案 6 :(得分:-1)
使用新活动中的getParent()
并调用父方法