2014-08-28 79 views
0

我的遊戲中有一個倒數計時器,我必須在主頁按鈕被按下時取消它。我試着用這樣的:如何在主頁按鈕被按下時取消定時器?

@Override 
    protected void onUserLeaveHint() { 
     super.onUserLeaveHint(); 
     timer.cancel(); 
    } 

但是,這並不爲我工作,因爲我有一些彈出的活動和一些其他的東西,因爲它的我失去了我的主要活動的重點,使計時器停止,這對我不好。如果主頁按鈕被按下,是否有辦法停止我的計時器?

+0

刪除計時器回調爲好; – Eenvincible 2014-08-28 14:21:24

回答

1

試試這個

@Override 
public void onStop() { 
    super.onStop(); 
    timer.cancel(); 
} 
+0

如果你不介意計時器在停止之前要運行多久,這將起作用。當onStop()被調用時,你不能確定什麼時候調用onStop(),所以你的計時器可能會「用完」並觸發一些行爲,即使你的遊戲現在在後臺。 – 2014-08-28 15:43:50

0

也許你應該在活動的onPause或onStop方法被調用時停止你的計時器。

+0

我會嘗試一下,讓你知道。 – marjanbaz 2014-08-28 14:35:42

+0

我試過了,當彈出一個彈出窗口時,它也停止了我的計時器,這並不好。例如,如果廣告打開,它將停止計時器。 – marjanbaz 2014-08-28 15:24:12

1

這是問題的一個常見的類型,沒有瑣碎的,內置的解決方案。但很容易寫你自己的。


的基本解決方案依賴於監控所有活動的onPause()onResume()事件。這通常通過使用實現以下行爲的基類Activity來完成,並且您的所有活動都會擴展它。

我通常使用我的Application類來處理知道何時不再處於前景的邏輯。所以在應用程序類中,每當我的活動暫停或恢復時,都會調用方法。

暫停時:

  • 我開始很短的計時器,說300毫秒長

時又說:

  • 我停止計時器,如果它正在運行

所以:

    如果您啓動活動B
  • ,你Application類將得到一個暫停信號,隨後馬上通過恢復信號。你的計時器不會過期。
  • 如果您的應用程序發送到後臺,您將收到一個暫停信號,並且沒有恢復信號。您的計時器將過期。

當計時器到期時,您知道您的應用程序在後臺,並且您採取了措施。在你的情況下,這意味着取消遊戲計時器。其他人將從服務器註銷。就我而言,我關閉了NIGHT MODE。


您可以根據我的答案代碼類似的問題,這說明每個活動如何提醒其狀態的應用程序:

在這個問題你可以看到正在設置的布爾標誌。在你的情況下,你會開始或停止計時器。

有關詳細信息,請瀏覽相關鏈接:

相關問題