主要活动的全局变量?

时间:2014-01-20 13:04:11

标签: android global-variables

我是Android(和Java)的新手,并试图找出我在各种活动,碎片等中存储我需要的全局变量的位置,以便我可以轻松访问它们,以及保存和恢复当应用程序暂停时(一个尚未完全理解的过程,但这不是我的问题)。

所以普遍的共识似乎是通过扩展应用程序(like described here)

来使用单身人士

现在我玩了一些,我想知道在主要活动中声明变量的原因是什么(例如 final static int myVariable )然后访问变量槽MainActivity.myVariable?有什么缺点?

提前谢谢!

5 个答案:

答案 0 :(得分:3)

首先,考虑设计您的应用程序而不需要首先考虑全局变量。首先使用全局状态变量似乎是一个简单的解决方案,但稍后会使测试和维护变得复杂。

如果绝对必要,应用程序类是正确的位置,因为它的生命周期是应用程序的生命周期。您也可以使用常规成员变量而不是static s。

如果将活动类中的变量存储为静态变量,则缺点包括但不限于:

  • 加载另一个活动类也需要加载主活动中的所有代码。

  • 从活动到另一个活动的不必要依赖,增加了耦合。

  • 静态模拟更难以模拟/注入,例如在测试设置中。具有成员变量的精简应用程序对象更容易模拟。

答案 1 :(得分:1)

您可以创建一个类Application的子类,此类的范围将是应用程序范围的,因此您可以全局访问variable(跨活动/片段)

here you will get related info

答案 2 :(得分:0)

除非变量绑定到Context,否则没有任何缺点将全局变量声明为静态...

维护Context的静态引用(如ActivityService),View s,Drawable和应用{{1 } ...

有人说在SO(我不记得了),Android会在低内存情况下清除静态内存...

答案 3 :(得分:0)

例如,如果你在“FirstActivity”中调用“SecondActivity”,使用startActivityForResult,添加一个Product do a list,在“SecondActivity”中你可以取消或添加这个产品,如果你添加它,你需要刷新“FirstActivity”中的产品列表,因此在“SecondActivity”中,您可以使用“private static final int ADDED = 1”和“private static final int CANCELED = 2”和在调用finish方法之前,在setResult的“SecondActivity”方法中传递其中一个属性,在FirstActivity的“onActivityResult”方法中,您可以验证“resultCode”是否为“SecondActivity。 CANCELLED ”或“SecondActivity” 。 ADD “并执行列表刷新与否。

只是一个例子..

答案 4 :(得分:0)

您可以使用Application的类(在应用程序不销毁时在内存中保存操作系统变量)或SharedPreferences(操作系统将变量保存到文件永久)。