我的代码中有一个错误,使我认为我不完全了解Android生命周期。是的,我已经阅读了所有文档并查看了图表,但是他们似乎只谈论何时保存数据,何时活动可能会放松焦点或被杀死。但是,我的问题是,如果我不需要保存状态,变量及其存储的值会发生什么?我希望它们会被销毁,但是我的代码中的一个错误似乎表明其他情况。

就我而言,这就是发生的事情。我有一项启动自定义视图的活动(没有XML,我只是在自定义视图中的屏幕上绘制位图)。我当前活动中唯一的变量只是我的视图的变量:gameview gameview;

现在,在我看来,我声明了几个位图,简单的int和float变量来处理绘图和触摸事件,并且我有一个包含小位图,每个对象的坐标以及其他一些内容的对象。该对象的我类中的变量之一是一个静态变量,代表当前计数它们的对象。我这样做了,因此对象的实例化导致它跟踪人对他们的对象的方式,而不是在对象类的类别之外跟踪它。

我期望静态变量在所有对象中保持相同的值,但是我也希望该变量与该活动视图的所有其他变量和对象一起被破坏,一旦ondestroyed被要求进行该活动。但是,这似乎没有发生。当再次启动此活动时,该静态变量仍然包含其上一次运行的先前值 - 即使被称为Ondestroyed。

现在我的问题不是如何解决此问题(我可以以不同的方式编写代码来解决此错误),但是我想了解为什么此静态变量发生这种情况,因为它不是整个应用程序的全局那个活动的观点?另外,这使我想知道该视图中其余的变量 - 它们是否被摧毁,并且在下次调用活动时,他们的记忆释放或至少不再可用,或者我自己需要自己做 - 即使我不需要保存任何此状态数据吗?

感谢您对此的任何见解。

有帮助吗?

解决方案

onDestroy 是一种实例方法,其发行的任何内存(或允许垃圾收集器释放)都是相应的实例。活动不是单身人士;活动的实例不止一个。

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

请参见 了解实例和班级成员 有关更多信息。摘录:

有时,您想拥有所有对象共有的变量。这是通过静态修饰符完成的。在声明中具有静态修饰符的字段称为静态字段或类变量。它们与班级相关,而不是与任何对象相关联。该类的每个实例都共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但是也可以在不创建类实例的情况下操纵类变量。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top