在安卓应用程序中,静态变量在活动中是否真的安全



我有一个多活动应用程序,并将数据保存在许多其他活动使用的主菜单活动中。

我在主要活动中的一个变量可能是这个

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....
}

如果更好的话,我可以把我的共享变量保存在那个helper类中。这个班一秒钟叫一次,如果它被杀了,我就死了,真的需要重新思考。我应该提到的是,我对我正在做的事情没有任何问题,但我的一个用户的Nexus-7崩溃了,我们不知道为什么,所以我想他可能比我运行的应用程序更多,这就是我的问题。

我还应该提到,如果用户退出应用程序,我已经保存了任何需要保存在SD卡上的文件中的变量,以便重新加载。换句话说,当应用程序被终止时,数据的丢失不是问题。我的问题是,只有当应用程序还活着的时候,我的主要活动才被终止。

感谢selbie和squonk在评论中的回答。由于没有任何一方的官方回复,我发布了自己的回复,因为我想结束这一切。

我的结论是,根据这篇帖子在Android中使用静态变量,静态变量本身不会被破坏,我所做的是安全的
这篇文章,Clearing Static data on Destroy()指出,"只要类被加载,静态变量的值就会一直存在…Android将卸载类的唯一原因是你的应用程序从内存中完全删除"

然而,正如squonk指出的那样,这可能不是一个好的做法。使用不是"活动"的类来承载静态全局变量和通用函数可能是更好的做法,而且更易于维护,而且通常更干净。我将朝着这个方向前进,因为它还有其他优势。

在任何一种情况下,很明显,当应用程序被破坏时,变量将被重新初始化,并且需要手动重置。在我的情况下,我将数据存储在SD卡上的文件中,这是保存数据的几种方法之一。

我在一个新的谷歌搜索中找到了上述链接。很明显,我本应该早点用这个词进行搜索,但我的搜索都没有返回有用的结果,主要是找到了单例与扩展应用程序的争论。

static变量不能通过"活动"使用over。正如您所说,当您从另一个活动再次调用时,即使您分配了值,它们也会成为初始值。

使用SharedPreference或将值与Bundle一起传递。

相关内容

最新更新