我在代码中发现了一个错误,这让我觉得自己并没有完全理解Android生命周期。是的,我已经阅读了所有文档并查看了所有图表,但它们似乎只谈到了何时保存数据,当活动失去焦点或被杀死时的情况。然而,我的问题是,如果我不需要保存状态,那么变量及其存储的值会发生什么?我原以为它们也会被销毁,但我的代码中的一个错误表明情况并非如此。
在我的情况下,我有一个活动,启动一个自定义视图(没有xml,我只是在自定义视图中绘制位图)。我当前在活动中唯一拥有的变量只是我的视图变量:GameView gameView;
现在,在我的视图中,我声明了几个位图、简单的int和float变量来处理绘画和触摸事件,并且我有一个包含小位图、每个对象坐标和其他一些东西的对象数组。在这个对象的类中的一个变量是一个静态变量,表示目前有多少个对象。我这样做是因为实例化对象会导致跟踪有多少个对象,而不是在对象类外跟踪。
我原以为静态变量在所有对象中都保持相同的值,但我也期望这个变量会随着Activity的视图被销毁时和所有其他变量和对象一起被销毁。然而,这似乎并没有发生。当这个活动再次启动时,这个静态变量仍然包含它上次运行的先前值 - 尽管已经调用了onDestroyed。
现在我的问题不是如何解决这个问题(我可以编写不同的代码来解决这个错误),而是我想理解为什么这个静态变量会出现这种情况,因为它不是全局的应用程序,它只存在于该活动的视图中?此外,这让我想到了该视图中的其余变量 - 它们是否被销毁并释放内存,或者至少它们的值在下一次调用该活动时不再可用,还是我需要自己处理这些 - 即使我不需要保存任何状态数据?
感谢您对此的任何见解。
在我的情况下,我有一个活动,启动一个自定义视图(没有xml,我只是在自定义视图中绘制位图)。我当前在活动中唯一拥有的变量只是我的视图变量:GameView gameView;
现在,在我的视图中,我声明了几个位图、简单的int和float变量来处理绘画和触摸事件,并且我有一个包含小位图、每个对象坐标和其他一些东西的对象数组。在这个对象的类中的一个变量是一个静态变量,表示目前有多少个对象。我这样做是因为实例化对象会导致跟踪有多少个对象,而不是在对象类外跟踪。
我原以为静态变量在所有对象中都保持相同的值,但我也期望这个变量会随着Activity的视图被销毁时和所有其他变量和对象一起被销毁。然而,这似乎并没有发生。当这个活动再次启动时,这个静态变量仍然包含它上次运行的先前值 - 尽管已经调用了onDestroyed。
现在我的问题不是如何解决这个问题(我可以编写不同的代码来解决这个错误),而是我想理解为什么这个静态变量会出现这种情况,因为它不是全局的应用程序,它只存在于该活动的视图中?此外,这让我想到了该视图中的其余变量 - 它们是否被销毁并释放内存,或者至少它们的值在下一次调用该活动时不再可用,还是我需要自己处理这些 - 即使我不需要保存任何状态数据?
感谢您对此的任何见解。