相当长的一段时间,我非常幸福,只要应用程序运行,静态[实例]变量就存在。然而,令我感到沮丧,并且非常惊慌,我觉得这不是真的。静态(类)变量的生存期
仅用于测试,我创建了一个静态的字符串列表,并在我的主activity
类中覆盖了onDestroy
方法来打印消息以验证应用程序已退出。在onCreate
方法中,我简单地添加了一个新的string
,并打印了列表中的内容。我发现的是,列表的大小不断增加,以前添加的所有字符串值仍然存在。
我读过的地方[甚至在这里]实例变量存在,只要应用程序,但我担心它不是真的如此。
更准确地说,我在使用Facebook SDK for Android时意识到了这个问题。我已经看到SessionEvents
类中听众列表中的AuthListener
实例随着时间的推移而不断增加。因此,无论何时启动应用程序并且用户使用FB登录,监听器方法都会触发多次,因为SessionEvents
类中存在实例。
有人曾经观察过这个,有没有一些主要的错误,我承诺了解Android的工作原理?
是什么给出的?
感谢您的阅读!
[UPDATE]
我支持BalusC
和rdineiu
校正。我真的不想在这里对实例和类变量产生困惑。唉,我急于发布我的问题,我犯了一个我不想做的错误。我非常清楚static
和instance
变量之间的差异。我只是打算编写class
变量,并且不能完全弄清楚将静态变量引用为instance
变量。
但是,我的问题依然存在。 @MisterSquonk - 不,我不会在这里混淆关于何时我的Activity
结束以及应用程序被破坏的情况。以下是我在示例中尝试的内容 - 我只有一个Activity
,它的作用是Main
。当我按下这个Activity
的后退按钮时,我假设Activity
从堆栈和中被移除,该应用也被破坏。我已经启动了任务管理器来验证我的应用程序不再运行。
静态变量!=实例变量 – BalusC 2011-05-28 19:23:23
与您的问题没有直接关系,而是参考您所说的内容......“在我的主要活动类中,覆盖了onDestroy方法以打印消息以验证应用程序已退出” - Don'不要将活动与应用程序混淆。杀死活动并不一定会杀死应用程序(“应用程序”)。 – Squonk 2011-05-28 19:48:40
@MisterSquonk - 不,我没有任何混淆。在我的特定应用程序中,我非常肯定,“活动”的杀死也意味着应用程序不再运行。我使用任务管理器对其进行了验证,并且更新了帖子以提及相同的内容。 – anirvan 2011-05-28 20:28:12