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

时间:2013-11-25 00:45:11

标签: java android

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

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

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卡上的文件中的所有变量,以便可以重新加载它们。换句话说,应用程序被杀死时数据丢失不是问题。我的问题是,只有当应用程序还活着时我的主要活动被杀死了。

2 个答案:

答案 0 :(得分:2)

感谢selbie和squonk在评论中的答案。由于我想发布我自己的官方答案,因此我想要关闭它。

我的结论是每篇文章 Using static variables in Android,静态变量本身不会被破坏,我所做的是安全的 这篇文章Clearing Static data onDestroy()指出“只要加载类,静态变量的值就会持续...... Android卸载类的唯一原因是你的应用程序被完全从内存中删除”

然而,正如squonk指出的那样,这可能不是一个好习惯。使用不是Activity的类来托管静态全局变量和常用函数可能是更好的实践,更容易维护并且通常更清晰。我将朝着这个方向前进,因为它也有其他优势。

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

我通过新的Google搜索找到了上述链接。显然我应该先用这个措辞进行搜索,但我的搜索都没有返回有用的结果,主要是找到单例与应用辩论的扩展。

答案 1 :(得分:-1)

static变量不能通过Activity使用。正如你所说,即使你分配了价值,当你从另一个活动再次打电话时,它们也会成为初始值。

使用SharedPreference或将值传递给Bundle