我有一个多活动应用程序,并将数据保存在主菜单活动中,这是许多其他活动所使用的。
我在主要活动中的一个变量可能是
static double targetAngle = 45;我可能会从另一个类似的活动中调用这个变量
diff = Main.targetAngle - angle;或者我可能会像这样
Main.targetAngle = angle;从这个引用来看,http://developer.android.com/guide/faq/framework.html似乎是传递数据的正确方式。但是,人们总是在谈论操作系统在任何时候杀死的活动。
我的问题是,这是否安全?
作为另一种选择,我在SO成员的建议下,有一个名为Helper的类,它具有一些功能,在每一个具有静态数据的活动中使用。例如,Helper类的数据后面跟着我的函数
public class Helper {
static double[] filter1 = new double[]{0,0,0,0,0};
static double[] filter2 = new double[]{0,0,0,0,0};
static double cog = 0;
...
various functions....
}如果这样做更好,我可以将我的共享变量保存在该助手类中。这个类每秒被调用一次,如果它被杀死了,我就死了,真的需要重新思考。我应该提一下,我做什么没有问题,但我的一个用户是他的Nexus-7崩溃,我们不知道为什么,所以我想他可能有比我更多的应用程序运行,因此我的问题。
我还应该提到,如果用户退出应用程序,我已经保存了任何需要保存在SD卡上的文件中的变量,以便重新加载它们。换句话说,当应用程序被杀死时,丢失数据不是一个问题。我的问题是,只有在应用程序还活着时,我的主要活动才被终止。
发布于 2013-11-25 16:19:11
我感谢塞尔比和克隆克在评论中给出的答案。没有一个官方的答复,我张贴自己的,因为我想结束这一点。
我得出的结论是,根据这篇Using static variables in Android文章,静态变量本身并没有被破坏,我正在做的事情是安全的。
在这篇文章中,Clearing Static data onDestroy()指出,“只要类是loaded...The的唯一原因,静态变量的值就会保持不变. Android卸载类的原因是应用程序被完全从内存中删除”。
然而,正如蹲木所指出的那样,这可能不是一个好做法。使用一个不是活动的类来托管静态全局变量和公共函数可能是更好的实践,而且更容易维护,而且通常更干净。我将朝着这个方向前进,因为它也有其他优点。
在这两种情况下,很明显,当应用程序被破坏时,变量将被重新初始化,需要手动重置。在我的例子中,我将数据存储在SD卡上的文件中,这是保存数据的几种方法之一。
我发现上面的链接与一个新的谷歌搜索。显然,我应该早些时候使用这种措辞进行搜索,但我的搜索中没有一个返回有用的结果,主要是找出单例还是扩展申请辩论的结果。
发布于 2013-11-25 00:54:42
static变量不能通过活动使用。正如您已经说过的,当您从另一个活动再次调用时,它们将成为初始值,甚至是您指定的值。
与SharedPreference一起使用Bundle或pass值。
https://stackoverflow.com/questions/20183129
复制相似问题