2012-11-15 104 views
0

我有一個活動,我想跟蹤兩個操作之間的時間間隔(對於ex startAction和endAction)。我已經使用下面的代碼來實現一個計時器,該計時器增加了500用戶按下startAction按鈕後MS:當應用程序關閉時計數的Android計時器

TextView dayTimer = (TextView)findViewById(R.id.tvDayTimer); 
long startTime; 
class DayTimer extends TimerTask { 

      @Override 
      public void run() { 
       BBCAndroid.this.runOnUiThread(new Runnable() { 


        public void run() { 
         long millis = SystemClock.elapsedRealtime() - startTime; 
         int seconds = (int) (millis/1000); 
         int minutes = seconds/60; 
         seconds  = seconds % 60; 

         dayTimer.setText(String.format("%d:%02d", minutes, seconds)); 
        } 
       }); 
      } 
     }; 


     startDayButton.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 

          startTime = SystemClock.elapsedRealtime(); 
         timer.schedule(new DayTimer(), 0,500); 
         LoginResult.DayState = 1; 
         startDayButton.setEnabled(false); 
         endDayButton.setEnabled(true); 
      } 
     }); 

現在我的問題是,如果我退出應用程序定時器stops.How我可以做,即使當用戶退出應用,它運行?總而言之,即使應用程序已關閉,我也需要一個計數器。

+4

您可以保存一個開始時間戳並將其與當前時間戳一起使用來計算已過去的時間。就像這樣,即使用戶完全關閉應用程序,計時器在重新打開時也會再次運行。 –

+0

如果您希望應用程序在運行時運行,則必須使用在後臺運行並且永遠不會被系統關閉的服務。 或者,當應用程序即將關閉時,您可以記住日期和時間值,並查看您的應用程序再次啓動時的區別。 –

回答

2

您可以啓動Service,即使您的應用程序已關閉,它也會啓動並運行。

Here是一個很好的教程。

1

您可以創建一個Service或創建定時器運行的線程。當您關閉應用時,這不會破壞您的計時器。

我希望這會有所幫助。

1

我使用生命週期解決了您的問題。

如果應用程序未被銷燬,您可以通過將代碼添加到onPause或onStop來計算時間。

但是ypu必須在用戶銷燬應用程序時做廣告。

這是我的解決方案來保持接收消息與我的應用程序在前臺運行,並避免過度的電力消耗。

閱讀關於德生命週期的位置:

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

我希望這是有用的。

相關問題