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

Timer.schedule wiederholt aufrufen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von snoofy, 09.09.2009.

  1. snoofy, 09.09.2009 #1
    snoofy

    snoofy Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    08.09.2009
    Hallo zusammen,

    ich experimentiere derzeit mit Timern rum und bin auf folgendes Problem gestoßen. Wenn ich einem Timer über schedule einen auszuführenden Timertask zuweise, dann kann ich schedule nachdem dieser Timertask aufgerufen wurde nicht erneut mit diesem Timertask füttern. Hier mal ein kurzer Beispielcode:

    Code:
    import java.util.*;
    
    import android.app.Activity;
    import android.os.*;
    import android.widget.*;
    
    import android.util.*;
    
    public class test extends Activity {
        /** Called when the activity is first created. */    
        private ImageView blinker;
        
        private Timer blinkTimer = null;
        
        private Handler handler = new Handler();
    
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            blinker  = (ImageView) findViewById(R.id.blinker);
            
            blinkTimer = new Timer("gameTimer");
        }
    
        public void onResume() {
            super.onResume();
            blinken();
        }
        
        public void onPause() {
            blinkTimer.cancel();
            super.onPause();
        }
    
        TimerTask blinkTimerTask = new TimerTask() {
            public void run() {
                handler.post(new Runnable() {
                       
                       public void run() {   
                           blinken();
                       }
                });
            }
        };
        
        public void blinken() {
            if (blinker.getVisibility() == ImageView.INVISIBLE) {
                blinker.setVisibility(ImageView.VISIBLE);
            } else {
                blinker.setVisibility(ImageView.INVISIBLE);
            }
            blinkTimer.schedule(blinkTimerTask, 800);
        }
    }
    Das Programm stirbt immer in der Zeile "blinkTimer.schedule(blinkTimerTask, 800);", wenn blinken() vom handler aus aufgerufen wird.

    Irgend eine Idee?
     
  2. snoofy, 10.09.2009 #2
    snoofy

    snoofy Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    08.09.2009
    So, ich habe jetzt folgende Variante gewählt, wobei ich mir nicht wirklich sicher bin, das die alten TimerTasks wirklich ordentlich entfernt werden.

    Code:
        public void startBlinkerTimer(int delay) {
            blinkTimer.schedule(new TimerTask() {
                public void run() {
                    handler.post(new Runnable() {
                           
                           public void run() {   
                               blinken();
                           }
                    });
                }
            }, delay);
        }
    
        public void blinken() {
            if (blinker.getVisibility() == ImageView.INVISIBLE) {
                blinker.setVisibility(ImageView.VISIBLE);
            } else {
                blinker.setVisibility(ImageView.INVISIBLE);
            }
            
            startBlinkerTimer(1);
        }
    
     

Diese Seite empfehlen