我注意到這個行爲,同時開發一個簡單的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