project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/util/TickHandler.java
changeset 10017 de822cd3df3a
parent 7584 7831c84cc644
equal deleted inserted replaced
10015:4feced261c68 10017:de822cd3df3a
    30  * following calls are delayed by (approximately) the interval.
    30  * following calls are delayed by (approximately) the interval.
    31  * The interval can be changed at any time, which will cause
    31  * The interval can be changed at any time, which will cause
    32  * an immediate execution of the runnable again.
    32  * an immediate execution of the runnable again.
    33  */
    33  */
    34 public class TickHandler extends Handler {
    34 public class TickHandler extends Handler {
    35 	private final Runnable callback;
    35     private final Runnable callback;
    36 	private int messageId;
    36     private int messageId;
    37 	private long interval;
    37     private long interval;
    38 	private boolean running;
    38     private boolean running;
    39 	
    39 
    40 	public TickHandler(Looper looper, long interval, Runnable callback) {
    40     public TickHandler(Looper looper, long interval, Runnable callback) {
    41 		super(looper);
    41         super(looper);
    42 		this.callback = callback;
    42         this.callback = callback;
    43 		this.interval = interval;
    43         this.interval = interval;
    44 	}
    44     }
    45 	
    45 
    46 	public synchronized void stop() {
    46     public synchronized void stop() {
    47 		messageId++;
    47         messageId++;
    48 		running = false;
    48         running = false;
    49 	}
    49     }
    50 	
    50 
    51 	public synchronized void start() {
    51     public synchronized void start() {
    52 		messageId++;
    52         messageId++;
    53 		sendMessage(obtainMessage(messageId));
    53         sendMessage(obtainMessage(messageId));
    54 		running = true;
    54         running = true;
    55 	}
    55     }
    56 	
    56 
    57 	public synchronized void setInterval(long interval) {
    57     public synchronized void setInterval(long interval) {
    58 		this.interval = interval;
    58         this.interval = interval;
    59 		if(running) {
    59         if(running) {
    60 			start();
    60             start();
    61 		}
    61         }
    62 	}
    62     }
    63 	
    63 
    64 	@Override
    64     @Override
    65 	public synchronized void handleMessage(Message msg) {
    65     public synchronized void handleMessage(Message msg) {
    66 		if(msg.what == messageId) {
    66         if(msg.what == messageId) {
    67 			callback.run();
    67             callback.run();
    68 		}
    68         }
    69 		if(msg.what == messageId) {
    69         if(msg.what == messageId) {
    70 			sendMessageDelayed(obtainMessage(messageId), interval);
    70             sendMessageDelayed(obtainMessage(messageId), interval);
    71 		}
    71         }
    72 	}
    72     }
    73 }
    73 }