我注意到这个行为,同时开发一个简单的Android游戏,它有2个活动。Android活动垃圾收集
游戏有2个活动,第一个是允许用户选择对手类型,等级和第二个实际游戏屏幕的屏幕。 第二个活动创建GameManager类的一个对象,该类处理所有游戏处理。 这个GameManager类还创建一个CountDownTimer,它开始提示用户输入(超时时游戏默认给对手)。
我注意到,如果用户退出第二个活动(返回到第一个),然后再次启动一个新游戏,则前一个定时器仍在运行直到完成。 我通过显式取消定时器(来自第二个活动的onDestroy())来处理此事,因为只将timerobject设置为'null'未取消定时器。
但是我很好奇,为什么前面的计时器在第一次退出我的活动后仍在运行? GC应该不会删除第二个Activity实例化的所有对象(以及它创建的任何子对象)吗?知道观察到的行为背后的原因会很好吗?
TIA
正如我在第一篇文章中提到的,我正在使用'CountDownTimer'(来自android.os.CountDownTimer)。猜猜这不是所有众所周知的:) - http://developer.android.com/reference/android/os/CountDownTimer.html没有太多关于创建/删除这个。嗯..所以我想把它设置为null是没有帮助的呢? – 2011-05-21 11:24:11
@ source.rar:道歉,回头看我现在看到。因为它是一个抽象类和android.os的一部分,那么将任何引用设置为'null'不会像普通类一样工作。正如你发现的那样,你需要明确地调用它的cancel()方法 - 这是我理解一个类的细节(比如它是抽象等)并相应地处理它的关键。有时需要在系统级调用诸如“取消”或“发布”等方法。但是,对于这类类,您自己的应用程序不支持GC。 – Squonk 2011-05-21 11:37:33
谢谢。所以一般来说,在Android中,程序员如何知道要注意这种行为? – 2011-05-21 15:04:54