Android - onDestroy应该破坏活动,它的变量和释放内存

时间:2010-12-16 14:50:19

标签: android memory lifecycle object-lifetime ondestroy

我的代码中有一个错误,让我觉得我并不完全了解Android生命周期。是的,我已阅读所有文档并查看了图表,但他们似乎只讨论何时保存数据,何时活动可能失去焦点或被杀死。但是,我的问题是,如果我不需要保存状态,那么变量&他们的储值?我希望它们被销毁,但我的代码中的错误似乎表明不是。

就我而言,这里发生了什么。我有一个启动自定义视图的活动(没有xml,我只是在自定义视图中在屏幕上绘制位图)。我目前在我的活动中唯一的变量只是我视图的一个变量:GameView gameView;

现在在我看来,我声明了几个位图,简单的int和float变量来处理绘图和触摸事件,我有一个包含小位图的对象数组,每个对象的坐标和一些其他东西。我的类中对此对象的变量之一是一个静态变量,它表示它们的对象数量的当前计数。我是这样做的,所以对象的实例化使它跟踪人对象是如何对象的,而不是在对象的类之外跟踪它。

我希望静态变量在所有对象中保持相同的值,但我也希望在为Activity调用onDestroyed之后,将该变量与该Activity的所有其他变量和对象一起销毁。但是,这似乎不会发生。再次启动此活动时,此静态变量仍包含其上次运行时的先前值 - 即使调用了onDestroyed。

现在我的问题不是如何解决这个问题(我可以用不同的方式编写代码来修复这个bug),但我想了解为什么这个静态变量会发生这种情况,因为它不是整个应用程序的全局,它只存在于Activity的视图中?此外,这让我想知道该视图中的其他变量 - 它们是否被破坏并且它们的内存被释放,或者至少它们的值在下次调用活动时不再可用,或者我自己需要这样做 - 即使我不需要保存任何这种状态数据?

感谢您对此有任何了解。

1 个答案:

答案 0 :(得分:9)

onDestroy是一个实例方法,它释放的任何内存(或允许垃圾收集器释放)都是相应的实例。活动不是单身人士;可以有多个活动实例。

静态变量是类变量,可以访问该类的所有实例。它们在加载类时初始化,而不是在创建类的每个实例时初始化。

有关详细信息,请参阅Understanding Instance and Class members。摘录:

  

有时候,你想拥有变量   这是所有对象共有的。这个   用静态完成   修改。具有静态的字段   声明中的修饰语是   称为静态字段或类   变量。他们与之相关   班级,而不是任何   宾语。班级的每个实例   共享一个类变量,该变量位于   内存中的一个固定位置。任何   object可以改变类的值   变量,但类变量也可以   被操纵而不创造   班级的实例。