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

Verwendung einer View in einem Service

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von korndi, 04.10.2011.

  1. korndi, 04.10.2011 #1
    korndi

    korndi Threadstarter Junior Mitglied

    Beiträge:
    28
    Erhaltene Danke:
    3
    Registriert seit:
    18.10.2010
    Hallo.

    Ich habe ein TimerService und möchte gerne in der onTick Methode in einem Chronometer die Zeit herunterzählen. Ohne Service hat es bestends geklappt.

    Mein Code

    Aufruf:
    Code:
     Intent i  = new Intent(Timer.this,TimerService.class);
                i.putExtra("ms", ms);
                startService(i);
    Service:

    Code:
    public class TimerService extends Service{
    
        CountDownTimer timer;
        Chronometer clock;
        @Override
        public IBinder onBind(Intent intent) {
    
            return null;
        }
        public void setClock (Chronometer cron)
        {
            this.clock = cron;
        }
        @Override
        public void onStart(Intent intent, int startId) {
            // TODO Auto-generated method stub
            int ms = intent.getIntExtra("ms", 0);
    
            timer = new  CountDownTimer(ms,1000){
                @Override
                public void onTick(long millisUntilFinished) {
    
                    int seconds = (int) (millisUntilFinished / 1000) % 60 ;
                    int minutes = (int) ((millisUntilFinished / (1000*60)) % 60);
                    int hours   = (int) ((millisUntilFinished / (1000*60*60)) % 24);
    
                    clock.setText( String.format("%02d:%02d:%02d", hours,minutes,seconds));
                    Log.e("Timer", String.valueOf(millisUntilFinished));
    
                }
    
                @Override
                public void onFinish() {
                    // TODO Auto-generated method stub
    
                }
            }.start();
            super.onStart(intent, startId);
        }
    Wie kann ich den Chronometer in meine Service ansteuern?

    danke

    Danke
     
  2. sixi, 05.10.2011 #2
    sixi

    sixi Erfahrener Benutzer

    Beiträge:
    237
    Erhaltene Danke:
    64
    Registriert seit:
    20.01.2009
    Aus dem Service heraus solltest du das eher nicht tun: der Service (liegt in der Natur von einem Service) kann unabhängig von jeglicher UI laufen, d.h. es ist nicht garantiert, dass es irgendwelche grafischen Elemente gibt, die du aktualisieren kannst.

    Es gibt zwei (bestimmt noch mehr ^^) Lösungswege:
    Du benutzt einen Broadcast Receiver in der Activity, welcher die Änderungen, die vom Service kommen entgegennimmt und diese in der UI anzeigt - oder
    du gehst über die "Application" - also nimmst eine Klasse die davon erbt. Diese existiert quasi immer (also der Context der Application, auch wenn "nur" der Service läuft) - und deligierst von da aus die Änderungen an die Activity weiter, die die UI Elemente enthält.
     

Diese Seite empfehlen