Timer.schedule wiederholt aufrufen

S

snoofy

Neues Mitglied
0
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?
 
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);
    }
 

Ähnliche Themen

Helmut1A
  • Helmut1A
Antworten
7
Aufrufe
1.138
Helmut1A
Helmut1A
M
  • maksimilian
Antworten
15
Aufrufe
1.715
maksimilian
M
W
  • waltsoft
Antworten
4
Aufrufe
960
waltsoft
W
Zurück
Oben Unten