2010-11-10 45 views
1

我有一個Timer,它每30秒執行一次TimerTask。我只想讓計時器在顯示活動時啓動一個新的TimerTask,即如果用戶接到電話或啓動新的活動,計時器將停止。然後我需要定時器重新啓動並重新啓動時重新啓動。活動失去焦點時停止計時器

現在,這應該是很容易的,我覆蓋「onWindowFocusChanged(布爾hasFocus)」方法和開始或停止取決於hasFocus值定時器。我啓動定時器的方式是每次創建一個新的Timer對象和TimerTask,而我停止Timer的方式是調用Timer對象上的cancel()方法,並將timer設置爲null。

我的問題是,這並不總是工作,如果我啓動具有定時器和快速開關方向的活動(開始/停止活動),我發現定時器並不總是被取消,我最終得到多個定時器以不斷增加的速度啓動TimerTasks。

我在這裏錯過了一些明顯的東西嗎?任何幫助將不勝感激。

感謝

回答

0

我有一個類似的問題,我結束了使用後的線程延遲,避免了定時器。雖然不是一個修復。

1

當我看到這個,這是因爲我在我的應用程序中創建了2個CountDownTimers。由於每個定時器只能讀取類型爲「1」的消息[見http://www.devdaily.com/java/jwarehouse/android/core/java/android/os/CountDownTimer.java.shtml],因此我的應用程序正常運行時似乎只有1個定時器。我在我的onDestroy中放置了一個「timer.cancel()」,它負責處理其中一個定時器,允許另一個定時器在onDestroy返回很久之後開始接收所有定時消息。

在創建另一個定時器之前取消任何現有的定時器,保留了定時器。

相關問題