1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Stopuhr mit currentTimeMillis - Pause Problem

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von MetBo, 18.06.2011.

  1. MetBo, 18.06.2011 #1
    MetBo

    MetBo Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    264
    Erhaltene Danke:
    4
    Registriert seit:
    14.05.2010
    Hallo,

    ich entwickel gerade eine kleine Stopuhr, die in meiner App eingebaut wird.

    Damit die Stopuhr wenig CPU Ressourcen zieht, habe ich mich für die Variante mit einem Handler entschlossen (Siehe Updating the UI from a Timer | Android Developers).

    Start und Stop beim Timer funktionieren, nur die Pause-Funktion möchte noch nicht ganz :thumbdn::thumbdn:

    Mit
    Code:
    protected OnClickListener mRecordListener = new OnClickListener() {
    		@Override
    		public void onClick(View arg0) {
    			mTimer.removeCallbacks(mUpdateTimerTask);
    			
    			if (!mIsRecord) {
    				if (mStartTime == 0L) {
    					mStartTime = System.currentTimeMillis();
    				}
    				
    				mTimer.postDelayed(mUpdateTimerTask, 100);	
    			} else {
    				mResumeTime = System.currentTimeMillis();
    			}
    			
    			mIsRecord = mIsRecord ? false : true;
    		}
    	};
    wird die Stopuhr gestartet und pausiert.

    Das eigentliche "zählen" passiert hier
    Code:
    protected Runnable mUpdateTimerTask = new Runnable() {
    		@Override
    		public void run() {
    			final long start = mStartTime;
    			long millis = 0L;
    			
    			if (mResumeTime == 0L) {
    				millis = System.currentTimeMillis() - start;
    			} else {
    				millis = System.currentTimeMillis() - (mResumeTime);
    			}
    			
    			int seconds = (int) (millis / 1000);
    		    int minutes = seconds / 60;
    		    seconds     = seconds % 60;
    		
    		    if (seconds < 10) {
    		        mTextTimer.setText("" + minutes + ":0" + seconds);
    		    } else {
    			    mTextTimer.setText("" + minutes + ":" + seconds);            
    		    }
    			
    			mTimer.postDelayed(mUpdateTimerTask, 100);
    		}
    	};
    Mein Problem: Wenn ich nach dem Pausieren die Stopuhr weiterlaufen lassen möchte, dann wird komischerweise die Zeit nicht korrekt berechnet ...

    Habt ihr eine Idee, wie ich das Pausieren am elegantesten lösen kann?

    Vielen Dank
     

Diese Seite empfehlen