繁体   English   中英

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

[英]Are static variables really safe across activities within an application in android

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

我在Main活动中的一个变量可能就是这个

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

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

我得出的结论是,根据这篇文章在Android中使用静态变量 ,静态变量本身不会被破坏,我正在做的是安全的。
这篇文章清除静态数据onDestroy()表示“只要加载类,静态变量的值就会持久... Android将卸载类的唯一原因是你的应用程序被完全从内存中删除“

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

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

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

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

使用SharedPreference或通过Bundle传递值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM