2012-12-10 60 views
2

为什么我不应该在活动中使用静态对象或不要对活动进行静态调用?活动中的静态内容

+0

我不觉得这有什么问题......只要你不放弃的静态对象的任何东西,这不是在活动静态的引用,它应该是罚款。 – gsingh2011

回答

3

一个更合理的说法会说是非常谨慎的使用Android的静态变量。

您可以使用它们,但要知道,你的应用程序能够而且将会由OS杀害,并重新启动,当用户返回到应用程序(即也许从最近的应用程序列表)。这会导致您的应用程序有许多不同的入口点,并且您不能假定静态变量将被初始化。

例如,设置在应用程序的第一个活动一个静态变量,并假定它总是会被设置为一个很大的错误。

此外,应谨慎存储任何有一个活动作为静态变量的引用,因为这趋向于不必要地消耗存储器的公共源极。例如,将一个View存储在一个静态变量中几乎肯定是一个错误,因为如果不清除,它将阻止整个活动被垃圾回收。

+0

对于为什么在一个Activity中设置的静态变量可以在另一个处于前景时未设置的情况,我一直非常好奇。在发现这个之前,我的印象是静态成员不会被垃圾收集,我想不出他们可能被删除的另一个原因。然而......你是对的。他们可以。 (???) – Turnsole

+2

尽管静态变量确实不会被垃圾收集,但是如果操作系统杀死了整个应用程序以释放内存,它们可以被重置。这很常见,并且可能会给开发人员带来许多无法预料的后果,例如,如果用户使用最近的应用程序列表或后退按钮,则可以从主活动以外的某个活动启动应用程序。 – wsanville

1

这是一个普遍的很好的做法,以避免使事情静态不需要是因为它们增加了内存泄漏的机会。如果您始终持有对某些数据的参考,GC将无法释放它。