2013-07-29 72 views
0

不幸的是我的架構不起作用,所以我需要你的幫助。尋找意見建立一個遊戲計時器

,我想解決的問題:

我編程的迷你遊戲中,你可以選擇像「運行1分鐘」演習。

  • 顯示應用的任何倒計時:片段,活動,動作條......如果我
  • 做任務完成後
  • 倒計時應該衝在最前面,如果離開片段
  • 倒計時應該用正確的進度再次回到片段

我試圖在實現CountDownTimer時解決問題。但是,如果countDownTimer是片段的一部分,它將被銷燬,如果我離開片段。當我回來的時候,倒數計時器從一開始就...

所以我想到了一個線程......但是我怎樣才能在fragment和whereelse中顯示倒計時?

線程還活着嗎?即使我關閉應用程序?

所以,你能說出一些關鍵字,我可以搜索解決問題。或者改爲描述解決方案?

感謝您的建議;)

回答

2

你或許應該把你的櫃檯在Service這將運行一個遠程進程並綁定到服務無處不在,你需要顯示的定時器,然後使用觀察者模式,從您撥打監聽器回調服務CountDownTimer的onTick方法,只要你要更新觀察者:

mCountDownTimer = new CountDownTimer(startTime, 1000) { 
     //update after each tick 
     public void onTick(long millisUntilFinished) { 

      long seconds = (millisUntilFinished/1000) % 60; 
      long minutes = ((millisUntilFinished/1000)/60) % 60; 
      long hours = (((millisUntilFinished/1000)/60)/60) % 24; 
      long days = (((millisUntilFinished/1000)/60)/60)/24; 
      if(listeners!=null){ 
       Log.d(TAG, "days:"+days + "hours:"+ hours + "minutes:"+ minutes + "seconds:"+ seconds); 
       listeners.onTimeChanged(days, hours, minutes, seconds); 
      } 
     } 

     public void onFinish() { 
      if(listeners!=null){ 
       Log.d(TAG, "timer finished"); 
       listeners.onTimerFinish(); 
      } 
     } 
    }.start(); 
+0

似乎是最好的解決方案。所以我甚至可以發送像「鍛鍊結束」這樣的推送通知。謝謝 – Bolic

1

我不會嘗試做一個實際的倒計時,因爲當APPLI離開,這似乎非常複雜的線程應該死。

而是在某​​處(sqlite db?file?)寫入開始時間和倒計時運行的持續時間。 無論何時需要顯示它,查詢它,並執行所需的過程來更新視圖,無論有何視圖。這很容易(對我來說)所有你的規格,沒有線程負擔,只使用一小部分磁盤空間。此外,您可以保存所有倒計時特定數據,而不會有任何問題,這可能會證明有用。

+0

謝謝。這是一個相當好的主意,因爲線程;-) – Bolic

+0

但推送通知正在我的腦海中。有了這個解決方案,我不能發送它們。 – Bolic